我有一些代码可以将几个(交叉验证的)模型放到某些数据中,如下所示。
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}}中的一个特定模型。我怎么能做到这一点?
答案 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)