R中用train()交叉验证做bagging时如何绘制RMSE与树数量关系图
实现bagging树数量与RMSE关系的操作步骤
首先澄清一个常见误解:直接在train()中设置nbagg=200时,caret的treebag方法默认不会自动遍历1到200的树数量选择最优值,而是固定使用200棵树训练模型,你输出中看到的80是数据集的特征数量,并非最优树数量。
操作流程
1. 定义待测试的nbagg取值网格
通过tuneGrid参数指定你要测试的树数量范围,示例如下:
# 提前加载依赖包 library(caret) library(rpart) library(ipred) # 自定义调参网格,比如测试10到200之间步长为10的所有nbagg取值 tune_grid <- expand.grid( nbagg = seq(10, 200, 10) )
2. 带调参的模型训练
将定义好的调参网格传入train()函数,重新训练模型:
ames_bag_tune <- train( Sale_Price ~ ., data = ames_train, method = "treebag", trControl = trainControl(method = "cv", number = 10), tuneGrid = tune_grid, control = rpart.control(minsplit = 2, cp = 0) )
3. 查看所有nbagg对应的RMSE结果
训练完成后,结果会存在模型对象的results字段中:
# 打印所有树数量对应的交叉验证评估指标 print(ames_bag_tune$results)
4. 绘制RMSE与树数量的关系图
- 基础绘图直接调用caret内置的plot方法即可:
plot(ames_bag_tune, xlab = "树数量(nbagg)", ylab = "10折交叉验证RMSE", main = "Bagging树数量与RMSE变化关系")
- 如果需要自定义样式的折线图,可以用ggplot2实现:
library(ggplot2) ggplot(ames_bag_tune$results, aes(x = nbagg, y = RMSE)) + geom_line(linewidth = 1) + geom_point(size = 2, color = "red") + labs(x = "树数量", y = "交叉验证RMSE") + theme_bw()
内容的提问来源于stack exchange,提问作者Mathica
相关产品推荐
相关产品推荐

