early_stopping を使ったブースティング回数の自動選択
これまでのように最適なブースティング回数を手作業で選ぶ代わりに、xgb.cv() の中で XGBoost に自動でブースティング回数を選ばせることができます。これは early stopping と呼ばれる手法で実現します。
Early stopping は、各ブースティングラウンドの後にホールドアウトデータに対して XGBoost モデルを評価し、ある一定のラウンド数の間ホールドアウト指標(ここでは "rmse")が改善しなければ、それ以上のブースティングラウンドの作成を停止(つまり学習を早めに打ち切り)します。ここでは xgb.cv() の early_stopping_rounds パラメータを使い、ブースティング回数の上限を大きめ(50)に設定します。なお、ホールドアウト指標が num_boost_rounds に到達するまで改善し続けた場合は、early stopping は発生しません。
ここでは、DMatrix とパラメータ辞書は用意済みです。あなたのタスクは、early stopping を用いた交差検証を実行することです。さあ、やってみましょう!
この演習はコースの一部です
XGBoost で学ぶ極限の勾配ブースティング
演習の手順
- 3 分割の交差検証を early stopping ありで実行し、指標は
"rmse"にします。early_stopping_roundsは10、ブースティング回数は50に設定します。seedは123を指定し、出力がpandasの DataFrame になるようにします。dtrain、params、metricsなどの他のパラメータの指定も忘れないでください。 cv_resultsを出力してください。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Create your housing DMatrix: housing_dmatrix
housing_dmatrix = xgb.DMatrix(data=X, label=y)
# Create the parameter dictionary for each tree: params
params = {"objective":"reg:squarederror", "max_depth":4}
# Perform cross-validation with early stopping: cv_results
cv_results = ____
# Print cv_results
print(____)