用r语言交叉验证做回归,用的KKNN这个包做K近邻方法回归,为什么这一步会报错,求帮忙指点一下
实现K折交叉验证,比较简单方式是使用caret包中的 trainControl()
函数。下面是示例数据集。
# 示例数据集
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))
# 查看数据集
# df
下面代码利用上面数据集执行多重线性回归模型,并设定k=5,执行K折交叉验证评估模型表现。
library(caret)
# 指定交叉验证,设定k为5
ctrl <- trainControl(method = "cv", number = 5)
# 拟合回归模型,并使用k折交叉验证评估模型表现
model <- train(y ~ x1 + x2, data = df, method = "lm", trControl = ctrl)
# 查看模型概要信息
print(model)
# Linear Regression
#
# 10 samples
# 2 predictor
#
# No pre-processing
# Resampling: Cross-Validated (5 fold)
# Summary of sample sizes: 8, 8, 8, 8, 8
# Resampling results:
#
# RMSE Rsquared MAE
# 3.873277 1 3.589545
#
# Tuning parameter 'intercept' was held constant at a value of TRUE
我们对输出结果稍作解释:
没有进行预处理。也就是说在拟合模型之前,没有以任何方式对数据进行缩放(scale)
评估模型采用重采样方式是5折交叉验证
每次训练集的大小为8
RMSE: 均方根误差,它衡量的是模型预测与实际观测之间的平均差异。RMSE越低模型就越能准确地预测实际观测值。RMSE = Σ(yi–y^i)2/n\sqrt{Σ(y{_i} – ŷ{_i})^2 / n}Σ(yi–y^i)2/n
r²: 这是对模型预测和实际观测之间相关性的度量。r²越高,模型就越能准确预测实际观测值。
MAE: 平均绝对误差,这是模型预测和实际观测之间的平均绝对差。MAE越低,模型就越能准确预测实际观测结果。MAE = 1/n * Σ|yi{_i}i – ŷi{_i}i|
输出的三个指标(RMSE、r²和MAE)都让我们了解模型在测试数据(看不见)上的表现。在实践中,我们通常拟合几个不同的模型,并比较上面三个度量指标,选择产生最低的测试误差的模型作为最佳。
下面的代码来检查最终的模型匹配:
# 查看最终模型
model$finalModel
# Call:
# lm(formula = .outcome ~ ., data = dat)
#
# Coefficients:
# (Intercept) x1 x2
# 21.2672 0.7803 -1.1253
通过输出得到最终模型为:
y = 21.2672 + 0.7803*(x1) – 1.12538(x2)
我们还可以查看每组测试的预测误差指标情况:
model$resample
# RMSE Rsquared MAE Resample
# 1 5.965809 1 5.556588 Fold1
# 2 4.267831 1 4.090775 Fold2
# 3 3.573658 1 3.457940 Fold3
# 4 3.119044 1 2.831199 Fold4
# 5 2.440045 1 2.011223 Fold5
这里我们选择了k=5,但可以选择任何组数。在实践中通常认为选择5到10次可产生可靠测试误差。