难以执行具有重复 CV 的 Caret GLM

Difficulty getting Caret GLM with Repeated CV to execute

我使用自制代码制作 10X10-fold cv logistic 模型已经很长时间了,但最近发现让 caret 为我处理这些乱七八糟的东西可能会很好。

不幸的是,我似乎遗漏了插入符号需要能够运行的一些细微差别。

具体来说,我不断收到此错误:

>Error in { : task 1 failed - "argument is not interpretable as logical"

请看看你能不能找出我做错的地方...

提前致谢!

数据集位于here.

dataset <- read.csv("Sample Data.csv")

library(caret)

my_control <- trainControl(
  method="repeatedcv",
  number=10,
  repeats = 10,
  savePredictions="final",
  classProbs=TRUE
)

将下一个代码块放在那里是为了让 caret 开心。我原来的因变量是一个二元变量,我已经将其转化为一个因子,但插入符号在因子水平为“0”和“1”时存在问题。不知道为什么。

dataset$Temp <- "Yes"
dataset$Temp[which(dataset$Dep.Var=="0")] <- "No"
dataset$Temp <- as.factor(dataset$Temp)

现在我(尝试)让插入符成为 运行 10X10-fold glm 模型...

testmodel <- train(Temp ~ Param.A + Param.G + Param.J + Param.O, data = dataset,
             method = "glm",
             trControl = my_control,
             metric = "Kappa")

testmodel


> Error in { : task 1 failed - "argument is not interpretable as logical"

我没有足够的声誉来发表评论,所以我将其作为答案发布。我 运行 你的确切代码,它对我来说很好用,两次。我确实收到了这个警告:

glm.fit: fitted probabilities numerically 0 or 1 occurred

根据作者的说法,此错误与 savePredictions 参数有关。看看这个问题: https://github.com/topepo/caret/issues/304

感谢@Sumedh,我认为问题可能不在我的代码中,因此我更新了所有包。

惊喜!现在可以了。所以我毕竟没有疯。

对于这次的消防演习,大家深表歉意。

虽然您已经通过更新 R 和插入符号找到了修复方法,但我想指出的是您的代码中存在(曾经)导致错误的错误,我可以在此处重现使用旧版本的 R 和插入符号:

trainControlsavePredictions 应该设置为 TRUEFALSE 而不是 'final'。似乎您只是将它与 returnResamp 参数混合在一起,这将完全采用此参数。

顺便说一句:R 和 caret 对因子的级别名称有限制,这就是为什么当您将因变量的 01 级别名称交给它时,caret 会抱怨。在这种情况下,使用简单的 dataset$Dep.Var <- factor(paste0('class', dataset$Dep.Var)) 应该可以解决问题。