
2025.03.07
メール対応担当の8割以上が「カスハラ被害」に クレームのハード化・長期化を防ぐ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.03.12
SNSで炎上している研究者は「研究者として正しい」 人文学のプロ・阿部幸大氏が説く“強い意見を出せない時代”に対する考え方
2021.09.30
「なぜセーラー服で出社してはいけないの?」 さくらインターネット・江草陽太氏の自由な発想の源
2025.03.11
自分よりできる人を採用し、ゴリ押しで権限委譲 東大発スタートアップに学ぶ、組織を伸ばすマネジメント
2025.01.07
1月から始めたい「日記」を書く習慣 ビジネスパーソンにおすすめな3つの理由
2025.03.05
「一人前のエンジニア」になるために必要なこと 未経験からフルスタックエンジニアへの道筋
2025.03.12
新規事業を継続するかどうかを見極める2パターンの判断軸 会社の規模別「撤退基準」の設け方
2025.03.13
改正後のiDeCoと退職金の受け取り方の事例 「改悪」は本当か? プロが真相と狙いを解説
2025.03.07
部下へのフィードバックで最初に伝える一言 何度も指摘せずに済むマネジメントの秘訣
2025.03.12
年収別iDeCoの税制メリット 1年で軽減される税負担をプロが試算
2015.11.24
人は食事をしないとどうなるか 餓死に至る3つのステップ