2024.12.10
“放置系”なのにサイバー攻撃を監視・検知、「統合ログ管理ツール」とは 最先端のログ管理体制を実現する方法
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.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
2024.12.09
国内の有名ホテルでは、マグロ丼がなんと1杯「24,000円」 「良いものをより安く」を追いすぎた日本にとって値上げが重要な理由
2024.11.29
「明日までにお願いできますか?」ちょっとカチンとくる一言 頭がいい人に見える上品な言い方に変えるコツ
2024.12.09
10点満点中7点の部下に言うべきこと 部下を育成できない上司の特徴トップ5
2024.12.04
いつも遅刻や自慢話…自分勝手な人にイラっとした時の切り返し 不平等な関係を打開する「相手の期待」を裏切る技
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.12.03
職場の同僚にイライラ…ストレスを最小限に抑える方法 臨床心理士が語る、「いい人でいなきゃ」と自分を追い込むタイプへの処方箋
2024.12.06
嫌いな相手の行動が気になって仕方ない… 臨床心理士が教える、人間関係のストレスを軽くする知恵
2024.12.05
「今日こそやろう」と決めたのに…自己嫌悪でイライラする日々を変えるには
PR | 2024.12.04
攻撃者はVPNを狙っている ゼロトラストならランサムウェア攻撃を防げる理由と仕組み