gpt4 book ai didi

r - 这是带插入符号的分层 k-CV 吗?

转载 作者:行者123 更新时间:2023-11-30 09:10:24 25 4
gpt4 key购买 nike

我想知道如何仅使用 R 中的插入符包来编程分层 k-CV。请参阅下面的示例:

library(mlbench)
library(caret)

data(Sonar)

set.seed(998)
inTraining <- createDataPartition(Sonar$Class, p = .75, list = FALSE)
training <- Sonar[ inTraining,]
testing <- Sonar[-inTraining,]


folds <- createFolds(factor(training$Class), k = 10, list = TRUE)

fitControl <- trainControl(## 10-fold CV
method = "cv",
indexOut=folds,
savePredictions="all")

set.seed(825)
gbmFit1 <- train(Class ~ ., data = training,
method = "gbm",
trControl = fitControl,
## This last option is actually one
## for gbm() that passes through
verbose = FALSE)

d=gbmFit1$pred

请注意,我没有指定 index,而仅指定 indexOut。插入符号是否每次都使用 IndexOut 的补集来训练模型?通过检查d,我可以看到 rowIndex 与每个折叠的定义相匹配,但是我如何确认每次的训练集都是折叠 i 中元素的补集?

最佳答案

我发现这很有趣,因为我一直使用 caret 并且从未考虑过关于 indexindexOut 的直接问题。?trainControl 下的帮助文档表示,如果 NULLindexOut 将包含 index 中未包含的唯一样本集但没有说明相反的情况。因此,我深入研究了 train.default 以了解发生了什么。当您分配时

fitControl = trainControl(..., indexOut = ...)

您可以自己断言fitControl$index == NULL。在 train.default 的代码中,有一行(函数定义的第 109 行)检查此条件,然后使用(对于“cv”)createFolds 和参数 returnTrain = TRUE。它执行此操作时不会检查您为 indexOut 设置的内容。

对于此特定场景,train.default 中似乎没有与 indexindexOut 相关的其他代码。这表明没有任何东西可以保证 index$Fold01indexOut$Fold01 之间不存在交集。

我们可以进一步检查这一点

intersect(x$control$index$Fold01,x$control$indexOut$Fold01)
## [1] 12 18 33 34 53 58 67 95 109 111 115 120 137 143 156

它来自运行问题中的确切代码。因此,indexindexOut 似乎并不是彼此完美的互补。

我建议最安全的方法是指定 index 而不是 indexOut 以获得所需的效果。

关于r - 这是带插入符号的分层 k-CV 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40567958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com