Kaggle頻出、表データの王者。XGBoost と LightGBM の仕組みと使いどころ。
Kaggleで『XGBoostとLightGBMが強い』ってよく聞くけど、何がそんなにすごいの?
どちらも勾配ブースティングのライブラリね。 表データ(構造化データ)に対してとても強力なのよ。
勾配ブースティングは、弱学習器(浅い決定木)を逐次的に追加していくアンサンブル学習。 各ステップで前のモデルの誤差を埋めるよう次の木を作る。
ランダムフォレストとは違うんですかぁ?
しずく、ごっちゃになっちゃう…
ランダムフォレストは並列に独立した木を作り平均するバギング。 勾配ブースティングは逐次に誤差を補正するブースティング。 両者は似て非なるアプローチよ。
XGBoostとLightGBMって、どう違うの?
XGBoostは2014年登場の元祖。 LightGBMはMicrosoft開発の高速版で、ヒストグラム法とLeaf-wise成長戦略で速度・メモリ効率が良い。
あとCatBoostもあって、こちらはカテゴリ変数の扱いが得意なの。 この3つはGBDT御三家と呼ばれているわ。
実装するときに気をつけることってありますかぁ?
主要なハイパーパラメータは (1)学習率(low to high)、(2)木の本数、(3)木の深さ、(4)正則化。 学習率を下げると過学習が緩和されるが本数を増やす必要があり、トレードオフ。
結局、ハイパラ調整は避けて通れないんだね〜。
そうね、最適化はGridSearchやOptunaなどで行うのが定番。 GBDTは強力だけど、ハイパラに敏感な一面もあるのよ。
DS検定では『GBDTは弱学習器の逐次追加』『XGBoost/LightGBMは表データで強い』『ランダムフォレストとブースティングの違い』が頻出。
import lightgbm as lgb
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
model = lgb.LGBMClassifier(
n_estimators=200,
learning_rate=0.05,
max_depth=6,
random_state=42,
)
model.fit(X_train, y_train, eval_set=[(X_test, y_test)])
確認クイズ
勾配ブースティングの特徴として正しいのはどれか。
- 弱学習器を並列に独立して作り、平均する
- 弱学習器を逐次的に追加し、各ステップで前モデルの誤差を補正する
- 決定木を使わない手法である
- 教師なし学習である
こたえを見る
正解: 2. 弱学習器を逐次的に追加し、各ステップで前モデルの誤差を補正する
逐次的に追加し、誤差を補正するのが勾配ブースティングの特徴です。 並列に独立した木を作るのはランダムフォレスト(バギング)で、両者の対比は頻出問題です。