我正在尝试为之前在R中构建的一些glm模型做一个10倍交叉验证。我对boot
包中的cv.glm()
函数有点困惑,尽管我读过很多帮助文件。当我提供以下公式:glm()模型的交叉验证
library(boot)
cv.glm(data, glmfit, K=10)
是否“数据”的说法在这里指的是整个数据集或仅对测试集?
到目前为止,我所看到的例子提供了“数据”参数作为测试集,但这并没有什么意义,比如为什么在同一个测试集上做10倍?他们都会给出完全相同的结果(我认为!)。
不幸?cv.glm
解释了它在一个有雾的方式:
数据:一个矩阵或包含该数据的数据帧。该行应 案件列对应于变量,其中一个是 响应
我的另一个问题是关于$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)
看看'启动::: CV的例子部分。 glm'。你应该输入整个数据,模型和CV的折叠。 –
感谢您的回复@RomanLuštrik。听起来很棒。尽管如此,我仍然想知道一些事情。此功能是否使用交叉验证中提供的所有数据?假设我为'cv.glm(data,glm,K = 10)'提供了一个1000行的数据框,它是否为数据创建了10个分区,每个数据分区是100,并进行交叉验证?对不起,我已经通过了?cv。glm但我没有在那里找到。 – Error404
如果你要做2倍的CV,这个函数将占用50%的数据并且适合模型。它会使用另外50%的数据来查看模型如何描述数据。或者,在一次性的简历中,除了一个数据“点”之外,它将适用于所有模型,并且看看单个“点”做得如何。重复N次,你会得到你的结果。 –