Caret 如何生成具有 K 折交叉验证的 OLS 模型?

How does Caret generate an OLS model with K-fold cross validation?

假设我有一些通用数据集,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 折 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

> mean(ols_model$resample$RMSE)==ols_model$results$RMSE
[1] TRUE

2) 模型是在整个训练集上训练的。 您可以使用 lm 或为 [= 指定 method = "none" 来检查这一点17=].

 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相同。