caretEnsemble错误:Error in FUN(X [ [i]],...):{....不为TRUE

3

我一直在尝试将两个回归模型(glmnet和bagEarth)的预测结果进行叠加,但是一直收到"Error in FUN(X[[i]], ...) : { .... is not TRUE"的错误信息。根据我的阅读,我发现这个问题源于重采样指数,但由于我正在同时训练这些模型,我不知道如何解决这个问题。我已经可以使用随机数复制该问题:

library(caret)
library(caretEnsemble)
rm(list=ls())

training <- as.data.frame(cbind(runif(24,1,100)
,runif(24,1,100)
,runif(24,1,100)
,runif(24,1,100)
,runif(24,1,100)
,runif(24,1,100)))

colnames(training) <- c("y", "x1", "x2", "x3", "x4", "x5")

set.seed(7)
ctrl <- trainControl(method = "cv", number = 3, returnResamp = "all", classProbs = FALSE, index = createMultiFolds(training$y, k = 3, times = 1))
model_list <- caretList(y~., data = training, trControl = ctrl, metric = "RMSE", methodList = c("glmnet", "bagEarth"))
train_ctrl <- trainControl(method = "cv", number = 3, classProbs = FALSE, savePredictions = TRUE, index = createMultiFolds(training$y, k = 3, times = 1))
glm_ensemble <- caretStack(model_list, method = "glm", metric = "RMSE", trControl = train_ctrl)

我知道可能有一些关键要素我漏掉了,欢迎提供任何建议。

谢谢, Anton

1个回答

1

进行一些调试后,错误信息来自于一个名为bestPreds的函数。这是一个未导出的函数,它会在控制对象的模型列表中查找已保存的预测(全部或最终)。您的控制对象中没有设置此项。如果您添加此项,一切都将正常运行。我承认,在这个地方提供一个错误消息会比仅仅抛出一个错误要好。

ctrl <- trainControl(method = "cv", number = 3, returnResamp = "all", 
                     savePredictions = "final",  # needs to be final or all
                     classProbs = FALSE, index = createMultiFolds(training$y, k = 3, times = 1))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接