Caret如何通过K折交叉验证生成OLS模型?

时间:2018-09-22 19:20:51

标签: r linear-regression cross-validation r-caret

比方说,我有一些通用数据集,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时,是否通过典型的k倍CV方法计算出RMSE / R-square / MAE?另外,当我在summary(ols_model)中看到的模型生成时,该模型是在整个数据集中训练的,还是在每个折痕处生成的模型的平均值?

如果没有,为了交易偏差的偏见,是否有办法在Caret中获取一次被训练一次的ems中的OLS模型?

1 个答案:

答案 0 :(得分:2)

这里是您示例的可复制数据。

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"指定trainControl。< / p>

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