Kaggle Tutorial

勾配ブースティング原理(GBDT)

残差を逐次的に学習する GBDT の仕組みと、学習率・木の本数・深さの関係を理解します。

GBDT の考え方#

勾配ブースティング(GBDT)は、前のモデルの誤差(残差)を次の木が予測することを繰り返し、 木を足し合わせて予測を改善していくブースティング手法です。

予測 = 木1 + lr × 木2 + lr × 木3 + …
(各木は「それまでの予測の誤差」を学習する)

「勾配」とは、損失関数を小さくする方向のことで、各ステップでその方向へ木を足していきます。

学習率と木の本数はトレードオフ#

学習率learning_rate)は 1 本の木の寄与の大きさです。

  • 学習率を小さく → 1 本あたりの効果は控えめ。多くの木が必要だが汎化しやすい
  • 学習率を大きく → 速く収束するが過学習しやすい

実務では「小さめの学習率 + 多めの木 + 早期終了」が定石です。

主要パラメータ#

パラメータ役割
learning_rate各木の寄与。小さいほど慎重(木数を増やす)
n_estimators木の本数。多すぎると過学習 → 早期終了で止める
max_depth / num_leaves木の複雑さ。大きいほど表現力↑・過学習リスク↑
subsample / colsample各木で使う行/列の割合。小さくすると正則化効果

注意

ランダムフォレストと違い、GBDT は n_estimators を増やしすぎると過学習します。 検証スコアが悪化し始める前に早期終了で止めるのが基本です。

scikit-learn での最小例#

from sklearn.ensemble import GradientBoostingClassifier

model = GradientBoostingClassifier(
    learning_rate=0.05, n_estimators=500, max_depth=3, random_state=42
)

実戦では、より高速・高精度な XGBoost / LightGBM / CatBoost を使います(次レッスン以降)。

理解度チェック#

QuizGBDT で「学習率を小さくする」ときに通常あわせて行うことは?

次のステップ#

次は、GBDT の代表的実装の一つ XGBoost を実践します。