Pythonを用いた機械学習のデータコンペでよく使われるLightGBM。
分類、回帰、ランキングなど幅広いタスクに適用でき、Kaggleなどのデータコンペでも多くの実績があります。
自分もLightGBMを用いて競馬の着順予測に取り組んでいるのですが、そろそろ生成AIに聞いているだけでは頭にハテナが浮かぶようになってきました。
LightGBMについて軽く理解するとともに、備忘録としてこちらの記事にも残そうと思います。
ちなみに自分の書いている競馬予想AIに関する記事はこちら
LightGBMの概要
最近新しい物事を調べるときはとりあえず生成AIにぶち込み、300文字以内で解説させ軽く概要を掴み、出てきたキーワードを順に調べていくことで理解しています。
したがって早速ChatGPTに解説させましょう。
------ ChatGPT回答 ------
LightGBMとは、Microsoftが開発した勾配ブースティングフレームワークの一つで、従来の勾配ブースティング手法に比べ、学習速度が速く、メモリ消費も抑えられる点が特徴です。
特にLeaf-wiseと呼ばれる独自の木構造アルゴリズムを採用しており、精度を高めつつ計算コストを削減できます。
------ ここまで ------
始めてみる単語がいくつか出てきました。
まず冒頭に出てくる勾配ブースティングとは何なのでしょうか?
これは「勾配」と「ブースティング」に分けて調べていくことで理解できそうです。
勾配ブースティングとは
まず「勾配」と聞いて頭に浮かぶのが、勾配降下法(最急降下法) です。
ある関数の勾配(微分値)を求め、目的となる値が小さく方向に係数を変化させます。
一方「ブースティング」とは単独では精度の高くない学習器を複数作り、その組み合わせで精度の高い学習器を作る手法を指します。
(この手法を機械学習ではアンサンブル学習と呼びます)
まとめると以下の通りです。
LightGBMは勾配ブースティングアルゴリズムの一つ
複数の学習器を誤差が小さくなるように更新し、精度の高いモデルを作る
従来の勾配ブースティングアルゴリズムとの違い
このアルゴリズムは予測精度が高い代わりに、計算時間が長いという特徴があります。
計算が進むにつれ学習器が増え、計算コストが重くなる様子は容易に想像がつくでしょう。
そこで予測精度を保ったまま計算時間を大幅に短縮したLightGBMが考案されました。
続いてここで導入された2つのテクニックについて解説していきます。
計算時間削減テクニック その1
1つ目のテクニックはLevel-WiseからLeaf-Wiseに変更した点です。
従来の勾配ブースティングアルゴリズムとして活躍していたXGboostではLevel-Wiseという、各枝ごとに特徴量分岐の葉を伸ばし、決定木を膨らませていきました。
一方でLightGBMで取り入れたLeaf-Wiseでは、分岐させる枝を絞って、葉を増やしていきます。
これより葉の数が大幅に減少し、計算時間も削減することができます。

図1 Level-WiseとLeaf-Wise (参考文献3)
計算時間削減テクニック その2
Leaf-Wiseで決定木を分岐させる際、どの決定木を選択するかは非常に重要な問題です。
LightGBMではこの問いに対してヒストグラムで分岐点の狙いをつけることで解決したそうです。
詳しくは特徴量をビン分けして、ビンごとの勾配とHessianを計算してこの値を元にGainを計算して…という複雑な手順を踏んでいるのですが、この記事では割愛します。
何はともあれこれらのテクニックを用いてLightGBMは大幅にコストを削減しました。
LightGBMは従来アルゴリズムに対してLeaf-Wiseという手法を採用することで、計算精度をそのままに速度を大幅に向上させた
これで何となくLightGBMについて理解できました。
数式を追った理解は後回しにして、次回はLightGBMの実装をしてみようと思います。
参考文献