勾配ブースティング:GBM と XGBoost
ブースティングとバギングの違い、GradientBoostingClassifier、XGBClassifier、早期停止を学びます。
「勾配ブースティング:GBM と XGBoost」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。
ブースティングとバギング
バギングでは木を並列に学習させ、その結果を平均します。一方、ブースティングでは木を逐次的に学習させ、新しい木がそれまでの木の誤りを修正します。
ブースティングはバイアスを低減するため、構造化データではバギングより高い精度が得られることがよくあります。
逐次的な弱学習器
勾配ブースティングでは、浅い木(弱学習器)を組み合わせたアンサンブルを構築します。各木は、現在のアンサンブルに残された残差(損失の勾配)に適合します。
小さな補正を数多く追加することで、全体として強力なモデルを構築します。
GradientBoostingClassifier
Scikit-learn には GradientBoostingClassifier が用意されています。主なパラメータは、木の数を指定する n_estimators、縮小率を指定する learning_rate、木のサイズを指定する max_depth です。
from sklearn.ensemble import GradientBoostingClassifier
gbm = GradientBoostingClassifier(
n_estimators=200,
learning_rate=0.1,
max_depth=3,
random_state=0,
)
gbm.fit(Xtr, ytr)
print(gbm.score(Xte, yte))学習率のトレードオフ
learning_rate は各木の寄与をスケーリングします。学習率を小さくするとより多くの木が必要になりますが、通常は汎化性能が向上します。
一般的な戦略は、低い学習率(例: 0.05)と多数の推定器を設定し、早期停止を利用することです。
from sklearn.ensemble import GradientBoostingClassifier
gbm = GradientBoostingClassifier(
n_estimators=1000,
learning_rate=0.05,
max_depth=3,
)max_depth を小さく保つ理由
ブースティングでは各木が弱学習器であるため、max_depth は通常 3 から 6 に設定します。深い木を使うと残差にすぐ過適合してしまいます。アンサンブルは少数の深い木ではなく、多数の浅い木によって強くなります。
XGBoost の紹介
XGBoost は最適化された勾配ブースティングライブラリです。より高速で、正則化機能を備え、欠損値も組み込みで処理できます。表形式の機械学習コンペティションで優れた成績を収めています。
from xgboost import XGBClassifier
model = XGBClassifier(
n_estimators=300,
learning_rate=0.1,
max_depth=4,
random_state=0,
)
model.fit(Xtr, ytr)
print(model.score(Xte, yte))XGBoost の主要パラメータ
主要な調整項目は GBM と共通しています。
n_estimatorsブースティングのラウンド数learning_rate各ラウンドでの縮小率max_depth木の深さsubsampleとcolsample_bytreeは正則化のためにランダム性を加えます
from xgboost import XGBClassifier
model = XGBClassifier(
n_estimators=500,
learning_rate=0.05,
max_depth=4,
subsample=0.8,
colsample_bytree=0.8,
)XGBoost の正則化
XGBoost は、L1 ペナルティ(reg_alpha)と L2 ペナルティ(reg_lambda)に加えて、分割に必要な最小損失減少量を指定する gamma を追加します。これらによってモデルの複雑さを制御し、通常の GBM よりも過適合を抑えられます。
from xgboost import XGBClassifier
model = XGBClassifier(
reg_alpha=0.1,
reg_lambda=1.0,
gamma=0.1,
)早期停止
early_stopping_rounds は、検証指標が N ラウンド連続で改善しなくなったときに学習を停止します。これにより適切な木の数を自動的に見つけ、過適合を防げます。
from xgboost import XGBClassifier
model = XGBClassifier(
n_estimators=2000,
learning_rate=0.05,
early_stopping_rounds=50,
eval_metric="logloss",
)
model.fit(Xtr, ytr, eval_set=[(Xte, yte)], verbose=False)
print("Best iteration:", model.best_iteration)特徴量の重要度を読み取る
XGBoost には feature_importances_ と、gain や weight などの重要度タイプに対応した、より詳細な get_booster().get_score() があります。gain は、特徴量によって損失がどれだけ改善されたかを表します。
model = XGBClassifier(n_estimators=200).fit(Xtr, ytr)
print(model.feature_importances_)
booster = model.get_booster()
print(booster.get_score(importance_type="gain"))ブースティングを使うタイミング
勾配ブースティングは、適切にチューニングすれば表形式データでランダムフォレストを上回ることがよくあります。その代わり、ハイパーパラメータの影響を受けやすく、逐次学習のため時間がかかります。まずは XGBoost のデフォルト設定から始め、learning_rate と max_depth を調整し、早期停止を利用してください。
クイックチェック
ブースティングに関する知識を確認しましょう。
まとめ
まとめ: ブースティングでは木を逐次的に学習させ、それぞれが以前の誤りを修正します。n_estimators、learning_rate(低い学習率と多数の木)、小さな max_depth を調整しましょう。XGBoost は正則化(reg_alpha、reg_lambda、gamma)と early_stopping_rounds を追加し、最適な木の数を自動的に選べます。
よくある質問
「勾配ブースティング:GBM と XGBoost」レッスンは無料ですか?
はい。「勾配ブースティング:GBM と XGBoost」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。
「勾配ブースティング:GBM と XGBoost」で何を学びますか?
ブースティングとバギングの違い、GradientBoostingClassifier、XGBClassifier、早期停止を学びます。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn AI with Pythonを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「勾配ブースティング:GBM と XGBoost」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn AI with Pythonレッスンでコードを書いて実行できますか?
はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 決定木:理論と実装
- ランダムフォレストとバギング
- 勾配ブースティング:GBM と XGBoost
- LightGBM と CatBoost