XGBoost 実践
正則化が強力な XGBoost の基本的な使い方と、早期終了を使った学習を学びます。
XGBoost とは#
XGBoost(eXtreme Gradient Boosting)は、勾配ブースティング(GBDT)に強力な正則化を加えた実装で、 Kaggle で長く主力として使われてきました。精度が高く、欠損値もそのまま扱えます。
早期終了つきの学習#
検証セットを渡し、スコアが改善しなくなったら早期終了します。
import xgboost as xgb
from sklearn.model_selection import train_test_split
X_tr, X_va, y_tr, y_va = train_test_split(X, y, test_size=0.2, stratify=y, random_state=42)
model = xgb.XGBClassifier(
n_estimators=2000,
learning_rate=0.05,
max_depth=4,
subsample=0.8,
colsample_bytree=0.8,
reg_lambda=1.0, # L2 正則化
eval_metric="auc",
early_stopping_rounds=100,
random_state=42,
)
model.fit(X_tr, y_tr, eval_set=[(X_va, y_va)], verbose=False)
print("best_iteration:", model.best_iteration)n_estimators は大きめに設定し、実際の本数は早期終了に決めてもらうのが定石です。
主なパラメータ#
| パラメータ | 役割 |
|---|---|
max_depth | 木の深さ。3〜8 程度が目安 |
subsample / colsample_bytree | 行/列のサンプリング。過学習抑制 |
reg_lambda / reg_alpha | L2 / L1 正則化 |
min_child_weight | 葉に必要な重み。大きいほど保守的 |
ヒント
最終予測は CV 全体で学習し直すか、各 fold のモデルの平均(OOF と test 予測の平均)を使います。 単一の train/valid 分割だけで決めると、検証データへ過適合することがあります。
理解度チェック#
次のステップ#
次は、大規模データで高速な LightGBM を実践します。