【问题标题】:Leave one out cross validation with lm function in R在 R 中使用 lm 函数留下一个交叉验证
【发布时间】:2014-01-27 00:15:21
【问题描述】:

我有一个包含 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 取平均值。

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

【问题讨论】:

  • 请提供一个可重现的例子。
  • @MatthewLundberg,希望这篇编辑对您有所帮助
  • 可重现的手段提供样本数据。如果这样更方便,您还可以使用众多内置数据集之一(请参阅?data)。

标签: r linear-regression lm cross-validation


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-02-26
    • 1970-01-01
    • 2016-11-27
    • 2018-04-12
    • 2013-03-04
    • 1970-01-01
    • 2014-09-13
    • 2013-08-19
    • 1970-01-01
    相关资源
    最近更新 更多