簡體   English   中英

caretEnsemble:組件模型沒有相同的重采樣策略

[英]caretEnsemble: Component models do not have the same re-sampling strategies

我有幾個使用同一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類的“廣播”。

你快到了。 要記住的一件事是,當您要使用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.

這將確保您的代碼將運行。

請注意,在您給出的示例代碼中,它將返回錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM