在R中用lm函数留出一个交叉验证

时间:2014-01-27 00:15:21

标签: r linear-regression lm cross-validation

我有一个506行的数据集,我正在执行一次性交叉验证,一旦我得到均方误差,我计算出我发现的均方误差的平均值。每次运行它都会发生变化。这是预期的吗?如果是这样,有人可以解释为什么每次运行它都会改变它?

要离开一个CV,我先将行洗牌,df是数据框

df <-df[sample.int(nrow(df)),]

然后,我将数据帧拆分为506个数据帧并将其发送到lm()并获取每个数据帧的MSE(在这种情况下,每行)

fit <- lm(train[,lastcolumn] ~.,data = train)
pred <- predict(fit,test)
pred <- mean((pred - test[,lastcolumn])^2)

然后我采取了我所有的MSE的平均值。

每次我运行这一切,我得到一个不同的意思。这是预期的吗?

1 个答案:

答案 0 :(得分:2)

一次性交叉验证是一种验证范式。您必须说明您用于预测的算法,并且您必须查看预测算法中是否存在参数的随机初始化。如果初始化随机变化,则可以在每次运行基础算法时解释不同的结果。您必须提到您正在使用的估算器/预测算法。如果您使用高斯混合模型,例如对于均值和协方差的不同初始化进行分类,这可能是一种可能的算法,其中LOOCV中的性能不一定总是相同的。高斯混合模型和K均值算法通常随机化数据点的选择以表示平均值。如果用于估计高斯数的信息理论标准,混合物中的高斯数也可以随着不同的初始化而改变。