caretEnsemble: модели компонентов не имеют одинаковые стратегии повторной выборки - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть несколько моделей прогнозирования, которые созданы с использованием одного и того же 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.

Почему, поскольку я использую ту же стратегию для генерации базовых моделей?

Я нашел «приведение» к классу caretList в обсуждении github zachmayer/caretEnsemble/issues/104.

1 Ответ

0 голосов
/ 13 ноября 2018

Вы почти у цели. Следует помнить, что когда вы хотите использовать caretEnsemble, в trainControl вы должны установить индекс повторной выборки с помощью опции index в trainControl. Если вы запускаете caretList, он имеет тенденцию устанавливать это сам, но лучше сделать это самостоятельно. Это особенно верно, когда вы запускаете разные модели за пределами caretList. Вы должны убедиться, что повторная выборка такая же. Вы также можете увидеть это в примере на github, на который вы ссылаетесь.

trainingControl <- trainControl(method='cv', 
                                number=10, 
                                savePredictions = "final", 
                                classProbs=TRUE, 
                                index=createResample(tr$type)) # this needs to be set.

Это обеспечит запуск вашего кода.

Обратите внимание, что в приведенном вами примере кода он вернется с ошибками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...