插入符号包(R)中的外部交叉验证循环?

机器算法验证 r 交叉验证 预言 插入符号
2022-03-29 13:54:19

有人可以提供一个很好的示例代码如何使用 R 中的 caret 包最好地实现外部交叉验证循环吗?该包提供了一个方便的 trainControl() 参数来调整内部交叉验证。但是,我想将其嵌入到多个外部交叉验证循环中,以获得对估计模型的预测性能的更稳定估计!

1个回答

内部和外部 CV 用于执行分类器选择,而不是对估计进行更好的预测。要获得更好的估计,请重复 cv。所以要执行 10 次重复 5 倍 CV 使用

trainControl(method = "repeatedcv",number = 5,
             ## repeated ten times
             repeats = 10)

但是,如果您真正想要的是嵌套 CV,例如在随机森林或 svm 之间进行选择),那么据了解,您必须明确地执行外部 CV。我对外部 5 倍、内部 10 倍所做的是:

ntrain=length(ytrain)    
train.ext=createFolds(ytrain,k=5,returnTrain=TRUE)
test.ext=lapply(train.ext,function(x) (1:ntrain)[-x])

for (i in 1:5){
    model<-train(Class ~ ., data = training[train.ext[[i]]],
                 trControl=trainControl(method = "cv",number = 10),
                 ...
    ...
    }