如何在使用train()和r中的交叉验证时绘制RMSE与装袋尝试的树数
Posted
技术标签:
【中文标题】如何在使用train()和r中的交叉验证时绘制RMSE与装袋尝试的树数【英文标题】:how to plot RMSE vs number of trees tries in bagging when using train() and cross validation in r 【发布时间】:2022-01-11 02:13:53 【问题描述】:我正在研究这个关于装袋方法的网站。 https://bradleyboehmke.github.io/HOML/bagging.html
我将使用带有交叉验证的 train() 函数进行装袋。像下面的东西。 据我所知,nbagg=200 告诉 r 尝试 200 棵树,计算每棵树的 RMSE 并返回实现最佳 RMSE 的树的数量(这里是 80 )。 现在我怎样才能看到这个模型中产生的 RMSE 其他 nbagg 值。就像该网站中的 RMSE 与树数的关系图(开始介绍 cv 方法和 train() 函数,如下图所示)
ames_bag2 <- train(
Sale_Price ~ .,
data = ames_train,
method = "treebag",
trControl = trainControl(method = "cv", number = 10),
nbagg = 200,
control = rpart.control(minsplit = 2, cp = 0)
)
ames_bag2
## Bagged CART
##
## 2054 samples
## 80 predictor
##
## No pre-processing
## Resampling: Cross-Validated (10 fold)
## Summary of sample sizes: 1849, 1848, 1848, 1849, 1849, 1847, ...
## Resampling results:
##
## RMSE Rsquared MAE
## 26957.06 0.8900689 16713.14
【问题讨论】:
我的回答解决了你的目的吗? 【参考方案1】:由于您分享的示例无法完全重现,因此我从mtcars
数据集中举了一个不同的示例来说明如何做到这一点。您可以为您的数据扩展它。
注意:此处显示的 RMSE 是 10 个 RMSE 的平均值,因为此处的 CV 数为 10。所以我们将只存储它。在此处的示例中也添加相关库。并将树的最大数量设置为 15,仅作为示例。
library(ipred)
library(caret)
library(rpart)
library(dplyr)
data("mtcars")
n_trees <-1
error_df <- data.frame()
while (n_trees <= 15)
ames_bag2 <- train(
mpg ~.,
data = mtcars,
method = "treebag",
trControl = trainControl(method = "cv", number = 10),
nbagg = n_trees,
control = rpart.control(minsplit = 2, cp = 0)
)
error_df %>%
bind_rows(data.frame(trees=n_trees, rmse=mean(ames_bag2[["resample"]]$RMSE)))-> error_df
n_trees <- n_trees+1
error_df
将显示输出。
> error_df
trees rmse
1 1 2.493117
2 2 3.052958
3 3 2.052801
4 4 2.239841
5 5 2.500279
6 6 2.700347
7 7 2.642525
8 8 2.497162
9 9 2.263527
10 10 2.379366
11 11 2.447560
12 12 2.314433
13 13 2.423648
14 14 2.192112
15 15 2.256778
【讨论】:
以上是关于如何在使用train()和r中的交叉验证时绘制RMSE与装袋尝试的树数的主要内容,如果未能解决你的问题,请参考以下文章
R:glmnet 的 caret::train 函数可以在固定的 alpha 和 lambda 交叉验证 AUC 吗?