勾配ブースティングとは
Gradient Boosting / GBM
弱い予測モデルを1つずつ順番に追加し、直前までの予測誤差を勾配降下法的に修正しながら精度を高めるアンサンブル学習手法
ひとことで言うと
簡単な予測モデルを少しずつ追加し、間違いを修正しながら精度を上げていく機械学習手法。
概要
勾配ブースティングとは、決定木のような単純な(弱い)予測モデルを1本ずつ順番に学習・追加していき、それまでのモデル全体の予測誤差を新しいモデルで補正することを繰り返すアンサンブル学習の手法。 各ステップで、損失関数の勾配を最も減少させる方向に新しい弱学習器を学習させ、それを既存モデルへ重み付きで加算していく点が、勾配降下法の考え方に対応する。 XGBoost・LightGBM・CatBoostといった実装が、表形式データを扱うタスクで高い予測精度を発揮する手法として広く使われている。
背景
単体の決定木は表現力が限られ、ランダムフォレストのように複数の木を独立に学習させる手法では、個々の木の誤りを直接補正する仕組みがなかった。 勾配ブースティングは、モデル全体の予測誤差を明示的に評価し、それを埋めるように次の弱学習器を追加していくことで、より高い精度を目指すために考案された。
歴史
1999年: Jerome Friedmanが、損失関数の勾配を利用して弱学習器を逐次追加するGradient Boosting Machineを提案。 2016年: ChenとGuestrinが、勾配ブースティングを高速化・正則化したXGBoostを発表し、機械学習コンペティションで広く使われる標準的な手法となる。
アーキテクチャ
各ステップで、それまでのモデル全体の予測誤差(損失関数の勾配)に最もよく適合する新しい決定木を学習し、既存モデルへ学習率(shrinkage)を掛けた小さな重みで加算していく。 学習率を小さくするほど多くの木を必要とする一方で過学習は抑えられ、木の本数・深さ・学習率のバランスが性能を左右する。 XGBoost・LightGBM・CatBoost等の実装は、正則化項の追加やヒストグラムベースの高速な分割探索など、独自の工夫で学習速度と精度を高めている。
ワークフロー
初期モデル(定数等)を用意 → 現在のモデルの予測誤差(勾配)を計算 → その誤差に適合する決定木を学習 → 学習率を掛けて既存モデルへ加算 → 指定した木の本数に達するまで繰り返す。
コード例
scikit-learnで勾配ブースティングを学習する
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
model = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1)
model.fit(X_train, y_train)
print(model.score(X_test, y_test))利点
- 表形式データに対して、多くの場合で高い予測精度を発揮する
- 損失関数を柔軟に設計でき、分類・回帰など多様なタスクに適用できる
- 特徴量重要度を算出でき、どの特徴量が予測に寄与しているかを把握しやすい
欠点
比較
関連用語
よくある質問
勾配ブースティングとランダムフォレストの使い分けは?
表形式データで最高水準の精度を狙うなら勾配ブースティング、チューニングの手間を抑え安定した結果を早く得たいならランダムフォレストが選ばれやすい。
XGBoostやLightGBMとの違いは?
いずれも勾配ブースティングの考え方に基づく実装で、正則化や分割探索の高速化など独自の工夫により、素朴な実装より高速・高精度になるよう改良されている。
参考文献
- Research PaperXGBoost: A Scalable Tree Boosting System
- Documentationscikit-learn: GradientBoostingClassifier