2017-07-18 31 views
0

我有一些代碼適合幾個(交叉驗證的)模型對某些數據,如下所示。r caret整合 - 在caretList中傳遞一個適合param的特定模型

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,如果我上運行method='gbm'train本身(不與在caretList訓練的幾款車型一起),我可以簡單地添加到verbose=FALSEtrain(),這將流經到gbm。但是當我在caretList中嘗試它時會引發錯誤。

所以我想通過verbose=FALSE(或理論上的任何其他適合參數)專門從caretListmethodList的一個特定型號。我怎樣才能做到這一點?

回答

0

好的這實際上在文檔中得到了很好的解決。

?caretList 

包括:

tuneList:可選的,caretModelSpec對象的命名列表。這是 更靈活methodList進行比和允許的 具體型號參數

的specificaiton我們已經確認,如果不是我的問題就解決了:

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)