为梯度提升机选择合适的树数量
在本练习中,您将准备构建一个梯度提升模型,用天气、类型和时间等因素来预测每小时租出的自行车数量。您将使用 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并赋值给变量elog。evaluation_log的每一行对应一棵新增的树,因此行号就是模型中的树数。 - 填空以获取在列
train_rmse_mean和test_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)