使用 early_stopping 自動選擇 boosting 回合數
現在,不用再嘗試「精挑細選」最佳的 boosting 回合數了。你可以直接在 xgb.cv() 中讓 XGBoost 自動幫你選擇回合數。這是透過一種稱為 early stopping 的技巧來達成。
Early stopping 的做法是:在每一個 boosting 回合後,將 XGBoost 模型拿去對保留出的資料集進行測試;如果在指定的回合數內,保留集上的評估指標(在此為 "rmse")不再改善,就停止產生更多的 boosting 回合(也就是提早結束模型訓練)。在這裡,你會在 xgb.cv() 中設定 early_stopping_rounds,並給一個較大的可能 boosting 回合上限(50)。請注意,若評估指標一路持續改善直到達到 num_boost_rounds,則不會發生 early stopping。
這裡已經為你建立好 DMatrix 與參數字典。你的任務是使用帶有 early stopping 的交叉驗證。動手做做看吧!
本練習屬於課程
使用 XGBoost 的極端梯度提升
練習說明
- 以 3 折交叉驗證搭配 early stopping,並以
"rmse"作為評估指標。使用10個 early stopping 回合與50個 boosting 回合。指定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(____)