如何将保存的模型传递给 caretEnsemble

How to pass saved models to caretEnsemble

对这方面相当陌生,如果我很厚,请见谅。 有没有办法将现有模型传递给 caretEnsemble?

我有多个模型,运行 在相同的训练数据上,我想将它们与 caretEnsemble 集成。 每个模型需要几个小时才能 运行,所以我保存它们,然后在需要时重新加载它们,而不是重新 运行。

model_xgb <- train(oi_in_4_24_months~., method="xgbTree", data=training, trControl=train_control)
saveRDS(model_xgb, "model_xgb.rds")

model_logit <- train(oi_in_4_24_months~., method="LogitBoost", data=training, trControl=train_control)
saveRDS(model_logit, "model_logit.rds")

model_xgb <- readRDS("model_xgb.rds")
model_logit <- readRDS("model_logit.rds")

我想将这些保存的模型传递给 caretEnsemble,但据我所知,我只能传递一个模型类型列表,例如"LogitBoost"、"xgbTree" 和 caretEnsemble 都会 运行 初始模型,然后对它们进行集成。 有没有办法将在相同数据上训练的现有模型传递给 caretEnsemble?

软件包作者有一个示例脚本 (https://gist.github.com/zachmayer/5152157),建议如下:

all_models <- list(model_xgb, model_logit)
names(all_models) <- sapply(all_models, function(x) x$method)
greedy <- caretEnsemble(all_models, iter=1000L)

但这会产生错误 "Error: is(list_of_models, "caretList") 不正确"。 我认为使用 caretList 以前不是强制性的,但现在是。

我不认为你仍然需要这个问题的解决方案,但可以回答其他有同样问题的人。

您可以使用 as.caretList(list(rpart2 = model_list1, gbm = model_list2))

添加供 caretEnsemblecaretStack 使用的模型

但请记住为 cross-validation/bootstrapping 使用相同的索引。 'If the indexes were different (or some stuff were not stored as "not/wrongly" specified in trainControl), it will throw an error when trying to use caretEnsemble or caretStack. Which is the expected behavior, obviously.' This issue 在 github 上有非常清晰和简单的说明。