r caretEnsemble - 将fit param传递给caretList中的一个特定模型

时间:2017-07-18 02:16:18

标签: r r-caret ensemble-learning

我有一些代码可以将几个(交叉验证的)模型放到某些数据中,如下所示。

library(datasets)
library(caret)
library(caretEnsemble)

# load data
data("iris")

# establish cross-validation structure
set.seed(32)
trainControl <- trainControl(method="repeatedcv", 
                             number=5, repeats=3, # 3x 5-fold CV
                             search="random")

algorithmList <- c('lda',         # Linear Discriminant Analysis 
                   'rpart' ,      # Classification and Regression Trees
                   'svmRadial')   # SVM with RBF Kernel

# cross-validate models from algorithmList
models <- caretList(Species~., data=iris, trControl=trainControl, methodList=algorithmList)
到目前为止一切顺利。但是,如果我向'gbm'添加algorithmList,我会收到大量无关的日志消息,因为gbm似乎有一个verbose=TRUE默认适合参数。

根据caret docs,如果我自己在train上运行method='gbm'(而不是在caretList训练过的几个模型),我可以简单地添加{ {1}}到verbose=FALSE,会流向train()。但是当我在gbm中尝试时,这会引发错误。

所以我想将caretList(或理论上的任何其他适合的参数)专门传递给verbose=FALSE的{​​{1}}中的一个特定模型。我怎么能做到这一点?

1 个答案:

答案 0 :(得分:0)

确实这在文档中实际上得到了很好的解决。

?caretList

包括:

  

tuneList:optional,一个名为caretModelSpec对象的NAMED列表。这是   比methodList更灵活,并允许特定的   模型特定参数

我已经确认我的问题解决了,而不是:

algorithmList <- c('lda',         # Linear Discriminant Analysis 
                   'rpart' ,      # Classification and Regression Trees
                   'svmRadial',   # SVM with RBF Kernel
                   'gbm')         # Gradient-boosted machines

我用:

modelTypes <- list(lda      = caretModelSpec(method="lda"),
                   rpart    = caretModelSpec(method="rpart"),
                   svmRadial= caretModelSpec(method="svmRadial"),
                   gbm      = caretModelSpec(method="rf", verbose=FALSE) 

...然后models <- caretList(...行来自:

models <- caretList(... methodList=algorithmList)

为:

models <-caretList(...  tuneList = modelTypes)