r caretEnsemble - 将拟合参数传递给 caretList 中的一个特定模型

r caretEnsemble - passing a fit param to one specific model in caretList

我有一些代码适合一些数据的几个(交叉验证)模型,如下所示。

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 中训练的几个模型一起) ,我可以简单地将 verbose=FALSE 添加到 train(),这将流向 gbm。但是当我在 caretList 中尝试时,这会引发错误。

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

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

?caretList

包括:

tuneList: optional, a NAMED list of caretModelSpec objects. This is much more flexible than methodList and allows the specificaiton of model-specific parameters

而且我已经确认我的问题已解决,如果不是:

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)