為梯度提升機選出合適的樹數
在這個練習中,你將準備建立一個梯度提升模型,根據天氣、日間時段與型態來預測每小時租借腳踏車的數量。你會使用 7 月份的資料來訓練模型。
7 月份的資料已預先載入。請記得 bikesJuly.treat 已經不含輸出欄位,因此你需要從未處理的資料取得它:bikesJuly$cnt。
你將使用 xgboost 套件來訓練隨機森林模型。xgb.cv()(docs)函式會在每加入一棵新樹時,透過交叉驗證估計樣本外學習誤差。最終模型要使用的合適樹數,是使保留集 RMSE 最小的那個數量。
在本練習中,呼叫 xgb.cv() 的關鍵引數為:
data:數值矩陣。label:輸出結果向量(也是數值)。nrounds:最大迭代輪數(要建的樹數)。nfold:交叉驗證的摺數。5 是不錯的選擇。objective:連續型輸出使用"reg:squarederror"。eta:學習率。max_depth:樹的最大深度。early_stopping_rounds:若連續此輪數沒有改進就停止。verbose:設為FALSE以保持安靜。
本練習屬於課程
R 中的監督式學習:回歸
練習說明
- 填入空格,對經處理的訓練資料執行
xgb.cv();將結果指定給變數cv。- 使用
as.matrix()將已處理的資料框轉為矩陣。 - 使用 50 輪,並進行 5 摺交叉驗證。
- 將
early_stopping_rounds設為 5。 - 將
eta設為 0.75、max_depth設為 5。
- 使用
- 從
cv取得資料框evaluation_log,並指定給變數elog。evaluation_log的每一列都對應到多一棵樹,因此列號就代表模型中的樹數。 - 填入空格以取得在
train_rmse_mean與test_rmse_mean欄位中最小值所對應的樹數。which.min()(docs)會回傳向量中最小值的索引。- 你需要多少棵樹?
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
# Run xgb.cv
cv <- xgb.cv(data = ____,
label = ___,
nrounds = ___,
nfold = ___,
objective = "reg:squarederror",
eta = ___,
max_depth = ___,
early_stopping_rounds = ___,
verbose = FALSE # silent
)
# Get the evaluation log
elog <- ___
# Determine and print how many trees minimize training and test error
elog %>%
summarize(ntrees.train = ___, # find the index of min(train_rmse_mean)
ntrees.test = ___) # find the index of min(test_rmse_mean)