R 中的 k 折交叉验证(逐步)


为了评估模型在数据集上的性能,我们需要衡量模型做出的预测与观察到的数据的匹配程度。

执行此操作的常用方法称为k 折交叉验证,它使用以下方法:

1.将数据集随机分为k组,或“折叠”,大小大致相等。

2.选择其中一个折叠作为约束装置。将模板调整到剩余的 k-1 折叠。根据张紧层中的观测值计算 MSE 检验。

3.重复此过程k次,每次使用不同的集合作为排除集。

4.将总体测试 MSE 计算为k 个测试 MSE 的平均值。

在 R 中执行 k 折交叉验证的最简单方法是使用 R 中插入符号库中的trainControl()函数。

本教程提供了一个快速示例,说明如何使用此函数对 R 中的给定模型执行 k 折交叉验证。

示例:R 中的 K 重交叉验证

假设我们在 R 中有以下数据集:

 #create data frame
df <- data.frame(y=c(6, 8, 12, 14, 14, 15, 17, 22, 24, 23),
                 x1=c(2, 5, 4, 3, 4, 6, 7, 5, 8, 9),
                 x2=c(14, 12, 12, 13, 7, 8, 7, 4, 6, 5))

#view data frame
df

y x1 x2
6 2 14
8 5 12
12 4 12
14 3 13
14 4 7
15 6 8
17 7 7
22 5 4
24 8 6
23 9 5

以下代码展示了如何在 R 中将 多元线性回归模型拟合到该数据集,并执行 k = 5 次的 k 倍交叉验证来评估模型的性能:

 library (caret)

#specify the cross-validation method
ctrl <- trainControl(method = " cv ", number = 5)

#fit a regression model and use k-fold CV to evaluate performance
model <- train(y ~ x1 + x2, data = df, method = " lm ", trControl = ctrl)

#view summary of k-fold CV               
print(model)

Linear Regression 

10 samples
 2 predictors

No pre-processing
Resampling: Cross-Validated (5 fold) 
Summary of sample sizes: 8, 8, 8, 8, 8 
Resampling results:

  RMSE Rsquared MAE     
  3.018979 1 2.882348

Tuning parameter 'intercept' was held constant at a value of TRUE

以下是如何解释结果:

  • 没有进行任何预处理。也就是说,在拟合模型之前我们没有以任何方式缩放数据
  • 我们用于评估模型的重采样方法是 5 倍交叉验证。
  • 每个训练集的样本量为 8。
  • RMSE:均方根误差。它衡量模型预测与实际观察结果之间的平均差异。 RMSE 越低,模型预测实际观测值就越准确。
  • Rsquared:这是模型预测与实际观察结果之间相关性的度量。 R 平方越高,模型预测实际观测值的准确性就越高。
  • MAE:平均绝对误差。这是模型预测与实际观测值之间的平均绝对差异。 MAE 越低,模型预测实际观测值就越准确。

结果中提供的三个测量值(RMSE、R 平方和 MAE)中的每一个都让我们了解模型在未发布数据上的性能。

在实践中,我们通常会拟合几个不同的模型,并比较此处提供的结果提供的三个指标,以确定哪个模型产生最低的测试错误率,因此是最好使用的模型。

我们可以使用以下代码来检查最终的模型拟合情况:

 #view final model
model$finalModel

Call:
lm(formula = .outcome ~ ., data = dat)

Coefficients:
(Intercept) x1 x2  
    21.2672 0.7803 -1.1253  

最终模型如下:

y = 21.2672 + 0.7803*(x 1 ) – 1.12538(x 2 )

我们可以使用以下代码来显示对每次折叠所做的模型预测:

 #view predictions for each fold
model$resample

      RMSE Rsquared MAE Resample
1 4.808773 1 3.544494 Fold1
2 3.464675 1 3.366812 Fold2
3 6.281255 1 6.280702 Fold3
4 3.759222 1 3.573883 Fold4
5 1.741127 1 1.679767 Fold5

请注意,在此示例中,我们选择使用 k=5 折叠,但您可以选择所需的任意折叠次数。在实践中,我们通常选择 5 到 10 层之间,因为事实证明这是产生可靠测试错误率的最佳层数。

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注