【发布时间】:2014-02-18 06:06:51
【问题描述】:
我正在尝试对我之前在 R 中构建的一些 glm 模型进行 10 倍交叉验证。我对 boot 包中的 cv.glm() 函数有点困惑,尽管我已经阅读大量帮助文件。当我提供以下公式时:
library(boot)
cv.glm(data, glmfit, K=10)
这里的“数据”参数是指整个数据集还是仅指测试集?
到目前为止,我看到的示例提供了“数据”参数作为测试集,但这并没有真正的意义,例如为什么在同一个测试集上进行 10 折?它们都会给出完全相同的结果(我假设!)。
不幸的是?cv.glm 解释得模糊不清:
data:包含数据的矩阵或数据框。行应该是 案例和列对应于变量,其中之一是 回应
我的另一个问题是关于 $delta[1] 结果。这是 10 次试验的平均预测误差吗?如果我想得到每个折叠的错误怎么办?
这是我的脚本的样子:
##data partitioning
sub <- sample(nrow(data), floor(nrow(x) * 0.9))
training <- data[sub, ]
testing <- data[-sub, ]
##model building
model <- glm(formula = groupcol ~ var1 + var2 + var3,
family = "binomial", data = training)
##cross-validation
cv.glm(testing, model, K=10)
【问题讨论】:
-
查看
boot:::cv.glm的示例部分。您应该输入整个数据,模型和CV的折叠。 -
感谢您的回复@RomanLuštrik。听起来很棒。不过,我仍然想知道一些事情。此函数是否在交叉验证中使用所有提供的数据?假设我为
cv.glm(data, glm, K=10)提供了一个 1000 行的数据框,它是否对数据进行了 10 个分区,每个分区为 100 个并进行交叉验证?抱歉,我已经通过了 ?cv.glm 但我没有在那里找到。 -
如果您要进行 2 倍 CV,该函数将获取 50% 的数据并拟合模型。它将使用其他 50% 的数据来查看模型对数据的描述程度。或者,在留一法 CV 中,它会将模型拟合到除一个数据“点”之外的所有数据“点”,并查看单出“点”的效果如何。重复 N 次即可得到结果。
-
嗨@RomanLuštrik。你说如果我做一个 2-fold CV,函数会根据 50% 的数据拟合模型,并用另外 50% 作为测试集。如果函数这样做,那么为什么它需要一个参数“glmfit”,它是一个先前拟合的模型?
-
如果你有关于交叉验证的问题,我建议你在 crossvalidated.com 上打开一个线程。
标签: r partitioning prediction glm cross-validation