You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 15:18:02