开始使用免费开始使用

为梯度提升机选择合适的树数量

在本练习中,您将准备构建一个梯度提升模型,用天气、类型和时间等因素来预测每小时租出的自行车数量。您将使用 7 月的数据来训练模型。

7 月的数据已预加载。请注意,bikesJuly.treat 已不再包含结果列,因此需要从未处理的数据中获取:bikesJuly$cnt

您将使用 xgboost 包来拟合随机森林模型。函数 xgb.cv()文档)会在每次向模型添加新树时,使用交叉验证估计样本外的学习误差。最终模型中应使用的合适树数量,是使留出集 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()文档)返回向量中最小值的索引。
    • 需要多少棵树?

交互式实操练习

通过完成这段示例代码来试试这个练习。

# 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)
编辑并运行代码