我正在尝试对我之前在 R 中构建的一些 glm 模型进行 10 倍交叉验证。我对cv.glm()
函数在boot
包,尽管我已经阅读了很多帮助文件。当我提供以下公式时:
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)
我对于使用各种包的10倍交叉验证方法总是有点谨慎。我有自己的简单脚本来为任何机器学习包手动创建测试和训练分区:
#Randomly shuffle the data
yourData<-yourData[sample(nrow(yourData)),]
#Create 10 equally size folds
folds <- cut(seq(1,nrow(yourData)),breaks=10,labels=FALSE)
#Perform 10 fold cross validation
for(i in 1:10){
#Segement your data by fold using the which() function
testIndexes <- which(folds==i,arr.ind=TRUE)
testData <- yourData[testIndexes, ]
trainData <- yourData[-testIndexes, ]
#Use test and train data partitions however you desire...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)