我有几个使用相同的trainControl
创建的预测模型。这些模型必须事先创建(即,我不能使用caretList
同时训练多个模型)。
下面是我的最小示例。当我手动组合多个(已经创建的)模型并将它们传递给caretStack
时,
library("kernlab")
library("rpart")
library("caret")
library("caretEnsemble")
trainingControl <- trainControl(method='cv', number=10, savePredictions = "final", classProbs=TRUE)
data(spam)
ds <- spam
tr <- ds[sample(nrow(ds),3221),]
te <- ds[!(rownames(ds) %in% rownames(tr)),]
model <- train(tr[,-58], tr$type, 'svmRadial', trControl = trainingControl)
model2 <- train(tr[,-58], tr$type, 'rpart', trControl = trainingControl)
multimodel <- list(svm = model, nb = model2)
class(multimodel) <- "caretList"
stack <- caretStack(multimodel, method = "rf", metric = "ROC", trControl = trainingControl)
库引发错误:
Component models do not have the same re-sampling strategies
。
为什么为什么要使用相同的策略来生成基本模型?
我在github讨论zachmayer/caretEnsemble/issues/104
中发现了对caretList类的“广播”。
答案 0 :(得分:0)
您快到了。要记住的一件事是,当您要使用caretEnsemble时,必须在trainControl
中通过trainControl
中的'index'选项设置重采样索引。如果运行caretList,它往往会自行设置它,但是最好自己进行设置。当您在caretList之外运行其他模型时,尤其如此。您需要确保重采样相同。您还可以在您引用的github上的示例中看到这一点。
trainingControl <- trainControl(method='cv',
number=10,
savePredictions = "final",
classProbs=TRUE,
index=createResample(tr$type)) # this needs to be set.
这将确保您的代码将运行。
请注意,在您提供的示例代码中,它将返回错误。