r - Caret 如何生成具有 K 折交叉验证的 OLS 模型?
问题描述
假设我有一些通用数据集,OLS 回归是最佳选择。因此,我生成了一个包含一些一阶项的模型,并决定在 R 中使用 Caret 进行回归系数估计和误差估计。
在插入符号中,这最终是:
k10_cv = trainControl(method="cv", number=10)
ols_model = train(Y ~ X1 + X2 + X3, data = my_data, trControl = k10_cv, method = "lm")
从那里,我可以使用提取回归信息summary(ols_model)
,也可以通过调用来提取更多信息ols_model
。
当我只看时ols_model
,RMSE/R-square/MAE 是通过典型的 k-fold CV 方法计算的吗?另外,当我看到的模型summary(ols_model)
生成时,这个模型是在整个数据集上训练的,还是在每个折叠中生成的模型的平均值?
如果没有,为了用方差换取偏差,有没有办法在 Caret 中获得一个一次只训练一个倍的 OLS 模型?
解决方案
这是您示例的可重现数据。
library("caret")
my_data <- iris
k10_cv <- trainControl(method="cv", number=10)
set.seed(100)
ols_model <- train(Sepal.Length ~ Sepal.Width + Petal.Length + Petal.Width,
data = my_data, trControl = k10_cv, method = "lm")
> ols_model$results
intercept RMSE Rsquared MAE RMSESD RsquaredSD MAESD
1 TRUE 0.3173942 0.8610242 0.2582343 0.03881222 0.04784331 0.02960042
1)ols_model$results
以上基于以下每个不同重采样的平均值:
> (ols_model$resample)
RMSE Rsquared MAE Resample
1 0.3386472 0.8954600 0.2503482 Fold01
2 0.3154519 0.8831588 0.2815940 Fold02
3 0.3167943 0.8904550 0.2441537 Fold03
4 0.2644717 0.9085548 0.2145686 Fold04
5 0.3769947 0.8269794 0.3070733 Fold05
6 0.3720051 0.7792611 0.2746565 Fold06
7 0.3258501 0.8095141 0.2647466 Fold07
8 0.2962375 0.8530810 0.2731445 Fold08
9 0.3059100 0.8351535 0.2611982 Fold09
10 0.2615792 0.9286246 0.2108592 Fold10
IE
> mean(ols_model$resample$RMSE)==ols_model$results$RMSE
[1] TRUE
2)模型在整个训练集上进行训练。您可以使用 usinglm
或指定method = "none"
for来检查这一点trainControl
。
coef(lm(Sepal.Length ~ Sepal.Width + Petal.Length + Petal.Width, data = my_data))
(Intercept) Sepal.Width Petal.Length Petal.Width
1.8559975 0.6508372 0.7091320 -0.5564827
这与ols_model$finalModel
.
推荐阅读
- python - 如何使用 Selenium 和 Python 将文本发送到密码字段
- c# - 列出对象检查两个属性
- javascript - 除非在网站上进行刷新,否则 Mi materializecss .datepicker 不起作用
- php - 如何合并或简化多个语句
- oracle - 如何在sql developer中执行同时具有out参数和返回值的函数以获取结果
- r - 如何根据列中的特定值序列在 df 中标记组
- python - python http服务器接收http post并使客户端重定向到另一个页面?
- kotlin - Kotlin:使用 Moshi 和 Hilt 对通用 JsonAdapter 进行依赖注入
- c++ - 一个变量在 C++ 中如何以及在哪里可能没有关联的名称?
- javascript - 在挂载下一个组件之前,如何在我的 App.vue 中等待异步函数?