Kaggle Tutorial

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_alphaL2 / L1 正則化
min_child_weight葉に必要な重み。大きいほど保守的

ヒント

最終予測は CV 全体で学習し直すか、各 fold のモデルの平均(OOF と test 予測の平均)を使います。 単一の train/valid 分割だけで決めると、検証データへ過適合することがあります。

理解度チェック#

QuizXGBoost で n_estimators を大きめ(例: 2000)にしつつ過学習を避ける一般的な方法は?

次のステップ#

次は、大規模データで高速な LightGBM を実践します。