如果我很厚的话,我会很抱歉。 有没有办法将现有模型传递给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)
但这会产生错误 “错误:是(list_of_models,”caretList“)不为TRUE”。 我认为以前使用caretList不是强制性的,但现在是。
答案 0 :(得分:1)
我认为您不需要解决这个问题,而是回答其他有同样问题的人。
您可以使用 caretEnsemble
caretStack
或 as.caretList(list(rpart2 = model_list1, gbm = model_list2))
使用的模型
但请记住使用相同的索引进行交叉验证/引导。 '如果索引不同(或者某些东西没有存储为 trainControl 中指定的“not/wrongly”),它会在尝试使用 caretEnsemble 或 caretStack 时抛出错误。显然,这是预期的行为。 github 上的 This issue 有非常清晰简单的说明。