2024.10.10
将来は卵1パックの価格が2倍に? 多くの日本人が知らない世界の新潮流、「動物福祉」とは
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の利点や欠点を明確にまとめればもっといいかなと思ったんですけど、それはちょっと時間がありませんでした。概要をまとめ、利点・欠点を明確にすることが目標です。
ご清聴ありがとうございました。
(会場拍手)
関連タグ:
2024.11.13
週3日働いて年収2,000万稼ぐ元印刷屋のおじさん 好きなことだけして楽に稼ぐ3つのパターン
2024.11.11
自分の「本質的な才能」が見つかる一番簡単な質問 他者から「すごい」と思われても意外と気づかないのが才能
2024.11.13
“退職者が出た時の会社の対応”を従業員は見ている 離職防止策の前に見つめ直したい、部下との向き合い方
2024.11.12
自分の人生にプラスに働く「イライラ」は才能 自分の強みや才能につながる“良いイライラ”を見分けるポイント
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.11.11
気づいたら借金、倒産して身ぐるみを剥がされる経営者 起業に「立派な動機」を求められる恐ろしさ
2024.11.11
「退職代行」を使われた管理職の本音と葛藤 メディアで話題、利用者が右肩上がり…企業が置かれている現状とは
2024.11.18
20名の会社でGoogleの採用を真似するのはもったいない 人手不足の時代における「脱能力主義」のヒント
2024.11.12
先週まで元気だったのに、突然辞める「びっくり退職」 退職代行サービスの影響も?上司と部下の“すれ違い”が起きる原因
2024.11.14
よってたかってハイリスクのビジネスモデルに仕立て上げるステークホルダー 「社会的理由」が求められる時代の起業戦略