1

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

为了留下一份简历,我先洗牌,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 的平均值。

每次我运行所有这些时,我都会得到不同的意思。这是预期的吗?

4

1 回答 1

2

留一法交叉验证是一种验证范式。您必须说明您用于预测的算法,并且您必须查看预测算法中的参数是否存在一些随机初始化。如果该初始化随机更改,则每次运行底层算法时可能会解释不同的结果。您必须提及您使用的估计器/预测算法。如果您使用高斯混合模型,例如用于具有不同初始化的均值和协方差的分类,这将是一种可能的算法,其中性能在 LOOCV 中不一定总是相同。高斯混合模型和 K-means 算法通常随机选择数据点来表示平均值。

于 2014-01-27T00:25:35.490 回答