
2025.02.06
ポンコツ期、孤独期、成果独り占め期を経て… サイボウズのプロマネが振り返る、マネージャーの成長の「4フェーズ」
GBDTアルゴリズム Gradient Boost Decision Tree with Iris datasets(全1記事)
リンクをコピー
記事をブックマーク
Yasshieeee氏:場違い感がすごいですが、一応、僕は大学生です。LTには若干慣れている予感はするんですけど、大学生なりのクオリティなのでご了承ください。
題名には「XGBoostについて」と書いたんですが、そもそも最初からXGBoostのすごく深いところまでいくのは、ちょっと初心者向けではないかなと思って……。今回は、XGBoostであるGradient Boost Decision Treeのアルゴリズムを幅広く解説するLTにしようと思います。よろしくお願いします。
まずは自己紹介します。工学院大学情報学部コンピュータ科学科で、未来の機械学習エンジニアです。Twitterは、さっきからつぶやいていますが、Yasshieeeeというもうそのままなので、フォローしてもらえるとありがたいです。
趣味はWebプロ・ゲーム・マインクラフトという、マジでオタクって感じなんですけど、ちょっと勘弁してほしいです。マインクラフトをやったことある人はわかると思うのですが、資源が大事なんです。大陸とかに家を作らなければいけないんですよ。木の近くとかに。なのに僕は、海のど真ん中に拠点を作るというバカなことをしています。
勾配ブースティングの説明をします。ちょっと環境が激しいですけれども。勾配ブースティングは、簡単に言うと学習器にあまり高性能なものを使わずに、弱分類器という感じで、予測値の誤差を新しく作った弱学習器がどんどん引き継いでいきながら誤差を小さくしていく方法です。
よく(使う)機械学習の分類アルゴリズムに、ランダムフォレストがあると思うのですが、ランダムフォレストは、この3つの決定木があったとして、それが一斉に実行されて、多数決で決めるやつです。
勾配ブースティング法は、木が増えるにしたがって、その木が持つ誤差を小さくしていく手法です(誤差を引き継いでいく)。
勾配ブースティングには、XGBoostやLightGBM、CatBoostがあります。Kaggleとかをやっていたら、たぶんLightGBMとかは、すごく有能なのではないかと思うんですけど……。Kaggleをやってる人ってどのぐらいいますか? 手を挙げてください。
(会場挙手)
けっこう。半数いる。Kaggleやっていない人もいるってことですか? いや、僕もやっていないんですけど。
木をたくさん作っていって勾配を引き継ぐ場合、たくさんデータがあるときは、外の記憶装置から適宜データを読み出して処理するのが普通だと思うんですけど、木の分割の点の検出の際に、データがたくさんだと、そこの勾配の統計を内部の変数に保存するのに失敗しちゃうんですよね。キャッシュミスです。
その結果、エラーは起きないんですけど、速度の低下とか、貪欲法という中の分割の点を決めるアルゴリズムの精度が低下したりするんです。結果的にメリットがない。
XGBoostは、各スレッドに内部バッファを割り当てて、勾配統計をあえてそこに中間的に配置して、その中間的な変数から小刻みにどんどん蓄積をしていくアルゴリズムを採用しています。各スレッドというのは、処理のジョブみたいな感じだと思ってください。
これ以上にたくさん特徴があるんですけれど、あんまりたくさん言うと、たぶんみなさん眠くなってしまうので言わないです。次にいきます。
やはりデータ量が多いと変数のオーバーフローなどが起きるので、それに対してこういうXGBoostというのが有効だよというので提案されたアルゴリズムです。
次にLightGBMですが、名前からして軽いです。本来、木というのはレベルを増やすと、例えば、Level Wiseのほうを見てほしいんですが、親のノードがあって下に子が2つあったときに、レベルを次にやると、その子2つがさらに子を2つ伸ばすんです。
これはちょっと無駄が多いので、Leaf Wiseを採用しているのがLightGBMです。Levelを増やすのよりも計算量が減るので、その分軽くなる。かつ、しかも、木のそれぞれの階層によって特徴量をヒストグラム化しているので、最適な枝分かれを探すための計算コストが減るらしい。詳しいことはあまり話しませんが、そんな感じに思ってください。
XGBoostでも、こうしたことを変数次第でできるようなので、気になった方はやってみてください。僕はやっていないです。演算量が減って軽そうということですね。
次にCatBoostです。Prediction shiftという問題が、決定木の勾配ブースティング問題でありました。新しい木を生成するときに、もともとあった木から同じデータセットを使って勾配の近似値、近い値を求めるので、誤差が絶対あるんですよ。そこでCatBoostでは、前回のブースティング段階で新しいデータセットを毎回サンプリングするんです。
これを実現している技術がもう1つありますが、今回これは割愛します。興味ある方は調べてみてください。図で説明してるんですけれど、猫は飽きっぽいということですね。だからCatなのかなと思っています。
今回やったことです。単純に3つを実行しました。アヤメの分類データセットを使いました。結果はGitHubにあります。このスライドも、さっきTweetDeckにハッシュタグ付きでツイートしたので、そこから辿れます。僕のおもちゃ箱というリポジトリに入っています。
実行時間だけみると、XGBoostが1.07秒で、LightGBM34.1ミリ秒、CatBoostが863ミリ秒と、グラフにすると恐ろしくLightGBMが速いという結果になりました。これ、パラメータチョイスとか一切してないんです。内部でパラメータの探索はしてるんですが……。Kaggleで重宝される理由がわかったという感じです。
これからですが、各アルゴリズムをもっと細かく追究しようと思っています。今回XGBoostの利点や欠点を明確にまとめればもっといいかなと思ったんですけど、それはちょっと時間がありませんでした。概要をまとめ、利点・欠点を明確にすることが目標です。
ご清聴ありがとうございました。
(会場拍手)
関連タグ:
2025.02.06
すかいらーく創業者が、社長を辞めて75歳で再起業したわけ “あえて長居させるコーヒー店”の経営に込めるこだわり
2025.02.03
「昔は富豪的プログラミングなんてできなかった」 21歳で「2ちゃんねる」を生んだひろゆき氏が語る開発の裏側
2025.02.03
手帳に書くだけで心が整うメンタルケアのコツ イライラ、モヤモヤ、落ち込んだ時の手帳の使い方
2025.01.30
2月の立春までにやっておきたい手帳術 「スケジュール管理」を超えた、理想や夢を現実にする手帳の使い方
2025.02.04
日本企業にありがちな「生産性の低さ」の原因 メーカーの「ちょっとした改善」で勝負が決まる仕組みの落とし穴
2025.02.05
「納得しないと動けない部下」を変える3つのステップとは マネージャーの悩みを解消する会話のテクニック
PR | 2025.02.07
プロジェクトマネージャーは「無理ゲーを攻略するプレイヤー」 仕事を任せられない管理職のためのマネジメントの秘訣
2025.01.29
社内会議は「パワポ」よりも「ドキュメントの黙読」が良い理由 Amazon元本社PMが5つのポイントで教える、資料の書き方
2025.01.31
古い手帳から新しい手帳への繰り越し方 手帳を買い換えたら最初に書き込むポイント
2025.01.07
1月から始めたい「日記」を書く習慣 ビジネスパーソンにおすすめな3つの理由