R 中的留一交叉验证(带有示例)
为了评估模型在数据集上的性能,我们需要衡量模型做出的预测与观察到的数据的匹配程度。
执行此操作的常用方法称为留一交叉验证 (LOOCV) ,它使用以下方法:
1.将数据集分为训练集和测试集,使用除一个观测值之外的所有观测值作为训练集的一部分。
2.仅使用训练集中的数据创建模型。
3.使用模型预测从模型中排除的观测值的响应值并计算均方误差 (MSE)。
4.重复此过程n次。将测试 MSE 计算为所有测试 MSE 的平均值。
在 R 中运行 LOOCV 的最简单方法是使用 R 中插入符号库中的trainControl()函数。
本教程提供了一个快速示例,说明如何使用此函数对 R 中的给定模型执行 LOOCV。
示例:R 中的留一交叉验证
假设我们在 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 中将 多元线性回归模型拟合到该数据集并执行 LOOCV 来评估模型的性能:
library (caret) #specify the cross-validation method ctrl <- trainControl(method = " LOOCV ") #fit a regression model and use LOOCV to evaluate performance model <- train(y ~ x1 + x2, data = df, method = " lm ", trControl = ctrl) #view summary of LOOCV print(model) Linear Regression 10 samples 2 predictors No pre-processing Resampling: Leave-One-Out Cross-Validation Summary of sample sizes: 9, 9, 9, 9, 9, 9, ... Resampling results: RMSE Rsquared MAE 3.619456 0.6186766 3.146155 Tuning parameter 'intercept' was held constant at a value of TRUE
以下是如何解释结果:
- 使用 10 个不同的样本构建 10 个模型。每个模型使用 2 个预测变量。
- 没有进行任何预处理。也就是说,在拟合模型之前我们没有以任何方式缩放数据。
- 我们用来生成 10 个样本的重采样方法是留一交叉验证。
- 每个训练集的样本量为 9。
- RMSE:均方根误差。它衡量模型预测与实际观察结果之间的平均差异。 RMSE 越低,模型预测实际观测值就越准确。
- Rsquared:这是模型预测与实际观察结果之间相关性的度量。 R 平方越高,模型预测实际观测值的准确性就越高。
- MAE:平均绝对误差。这是模型预测与实际观测值之间的平均绝对差异。 MAE 越低,模型预测实际观测值就越准确。
结果中提供的三个测量值(RMSE、R 平方和 MAE)中的每一个都让我们了解模型在未发布数据上的性能。
在实践中,我们通常会拟合几个不同的模型,并比较此处提供的结果提供的三个指标,以确定哪个模型产生最低的测试错误率,因此是最好使用的模型。