R - 交叉验证中的两种类型的预测

时间:2017-05-08 20:22:42

标签: r prediction cross-validation

当我使用交叉验证技术和我的数据时,它给了我两种类型的预测。 CVpredict和预测。两者之间有什么区别?我猜cvpredict是交叉验证预测但另一个是什么?

以下是我的一些代码:

crossvalpredict <- cv.lm(data = total,form.lm = formula(verim~X4+X4.1),m=5)

这就是结果:

fold 1 
Observations in test set: 5 
            3    11    15    22    23
Predicted   28.02 32.21 26.53  25.1 21.28
cvpred      20.23 40.69 26.57  34.1 26.06
verim       30.00 31.00 28.00  24.0 20.00
CV residual  9.77 -9.69  1.43 -10.1 -6.06

Sum of squares = 330    Mean square = 66    n = 5 

fold 2 
Observations in test set: 5 
            2     7    21    24    25
Predicted    28.4  32.0  26.2 19.95  25.9
cvpred       52.0  81.8  36.3 14.28  90.1
verim        30.0  33.0  24.0 21.00  24.0
CV residual -22.0 -48.8 -12.3  6.72 -66.1

Sum of squares = 7428    Mean square = 1486    n = 5 

fold 3 
Observations in test set: 5 
            6    14   18    19    20
Predicted   34.48 36.93 19.0 27.79 25.13
cvpred      37.66 44.54 16.7 21.15  7.91
verim       33.00 35.00 18.0 31.00 26.00
CV residual -4.66 -9.54  1.3  9.85 18.09

Sum of squares = 539    Mean square = 108    n = 5 

fold 4 
Observations in test set: 5 
            1     4     5       9   13
Predicted   31.91 29.07  32.5 32.7685 28.9
cvpred      30.05 28.44  54.9 32.0465 11.4
verim       32.00 27.00  31.0 32.0000 30.0
CV residual  1.95 -1.44 -23.9 -0.0465 18.6

Sum of squares = 924    Mean square = 185    n = 5 

fold 5 
Observations in test set: 5 
            8    10    12     16    17
Predicted    27.8 30.28  26.0 27.856 35.14
cvpred       50.3 33.92  45.8 31.347 29.43
verim        28.0 30.00  24.0 31.000 38.00
CV residual -22.3 -3.92 -21.8 -0.347  8.57

Sum of squares = 1065    Mean square = 213    n = 5 

Overall (Sum over all 5 folds) 
 ms 
411 

2 个答案:

答案 0 :(得分:0)

您可以通过阅读正在使用的功能cv.lm的帮助来检查。你会在那里找到这一段:

  

返回输入数据框,带有其他列   '预测'(使用所有观察值的预测值)和'cvpred'   (交叉验证预测)。交叉验证残差和   方块('ss')和自由度('df')返回为   数据框的属性。

其中 Predicted 是使用所有观察值得出的预测值的向量。换句话说,它似乎是对你的培训&#34;做出的预测。数据或制作&#34;样本&#34;。

要检查是否可以使用lm

来匹配相同的模型
fit <- lm(verim~X4+X4.1, data=total)

并查看此模型的预测值:

predict(fit)

cv.lm

返回的内容相同

当我在R中的 iris 数据集上尝试它时 - cv.lm()预测返回的值与predict(lm)相同。因此,在这种情况下 - 它们是样本内预测,其中模型适合并使用相同的观察结果。

答案 1 :(得分:0)

lm()不会给出“更好的结果”。我不确定predict()和lm.cv()可以如何相同。 Predict()返回每个样本的Y的期望值,该期望值是从拟合模型(协变量(X)及其相应的估计Beta值)估算得出的。这些Beta值以及模型误差(E)是根据该原始数据估算的。通过使用predict(),您会获得模型性能的过度乐观估计。这就是为什么它看起来更好的原因。使用迭代样本支持技术(例如交叉验证(CV)),可以更好(更现实)地评估模型性能。偏差最小的估计值来自留一法CV,不确定性最小(预测误差)的估计值来自2倍(K = 2)CV。