首页 > 解决方案 > R caret :重新组合几个火车对象

问题描述

假设我正在使用插入符号包进行相同(种子固定)交叉验证,但仅使用不同的复杂度参数对同一模型进行多次运行,例如:

library(caret)
data(iris)

# controls are the same for every models
c = trainControl(method = "cv",number=10,verboseIter = TRUE) 
d = iris # data is also the same 
f = Species ~ . # formula is also the same 
m = "rpart" # method is also the same 


set.seed(1234)
model1 <- train(form = f, data = d, trControl = c, method = m,
                tuneGrid = expand.grid(cp = c(0,0.5)))
set.seed(1234)
model2 <- train(form = f, data = d, trControl = c, method = m,
                tuneGrid = expand.grid(cp = c(0.1,0.2)))

set.seed(1234)
model3 <- train(form = f, data = d, trControl = c, method = m,
                tuneGrid = expand.grid(cp = c(0,0.5,0.1,0.2)))

有没有一种方法可以仅从 model1 和 model2 “构建” model3 训练对象? 计算很长,我没有在同一个插入符号调用中运行所有不同的调优。但是在同一个火车对象中进行每次运行比较它们会更容易(通过绘图函数、更新函数、重采样函数等......)

我特别在寻找一种方法来做同样的事情 plot.train 做但所有这些都在一起。

标签: rmerger-caret

解决方案


我完全理解您的担忧,因为我的计算资源也非常有限。但是我会按如下方式处理它,而不是“构建”model3对象。

假设您希望达到的精度最高。然后您只需要评估以下内容:我们认为哪些model1和哪些准确率最高?model2然后我们只对选择最佳结果的调整参数感兴趣。例如,我们看到以下内容:

> model1$bestTune$cp
[1] 0
> model2$bestTune$cp
[1] 0.2
> model1$results$Accuracy ## Respectively for cp = 0.0 and cp = 0.5
[1] 0.9333 0.3333
> model2$results$Accuracy ## Respectively for cp = 0.1 and cp = 0.2
[1] 0.9267 0.9267    

我们会选择cp = 0.

假设您已将事物分解为model1, model2, model3, ... 并希望使用它们探索所有手动输入的参数值。

k = 2 ## Here we only have model1 and model2 to compare
evaluate <- list()
for (i in 1:k) {
  model = eval(parse(text = paste0("model", i)))
  evaluate[["cp"]][[paste0("model", i)]] <- 
    model$finalModel$tuneValue$cp
  evaluate[["accuracy"]][[paste0("model", i)]] <- 
    model$results$Accuracy[[which(model$results$cp == model$bestTune$cp)]]
}    

然后在我们的evaluate列表中,我们有以下内容:

> evaluate
$cp
model1 model2 
   0.0    0.2 
$accuracy
model1 model2 
0.9333 0.9267 

在此基础上,我们可以做

> which(evaluate$accuracy == max(evaluate$accuracy))
model1 
     1 
> evaluate$cp[[which(evaluate$accuracy == max(evaluate$accuracy))]]
[1] 0

现在我们可以愉快地选择cp = 0,我们也知道最优结果cp存储在model1.

如果您仍希望“构建” model3,您可以在选择我们评估为最佳模型的模型后简单地替换一些组件(例如results,将存储 AccuracySD、KappaSD 和此类指标的组件)——model1在这种情况下.


推荐阅读