開始使用免費開始

為梯度提升機選出合適的樹數

在這個練習中,你將準備建立一個梯度提升模型,根據天氣、日間時段與型態來預測每小時租借腳踏車的數量。你會使用 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,並指定給變數 elogevaluation_log 的每一列都對應到多一棵樹,因此列號就代表模型中的樹數。
  • 填入空格以取得在 train_rmse_meantest_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)
編輯並執行程式碼