使用caret包运行带有controls = cforest_unbiased()的cforest

Jam*_*ers 3 r random-forest r-caret

我想使用插入包运行一个没有偏见的cforest.这可能吗?

tc <- trainControl(method="cv",
               number=f,
               index=indexList,
               savePredictions=T,
               classProbs = TRUE,
               summaryFunction = twoClassSummary)
createCfGrid <- function(len, data) {
    g = createGrid("cforest", len, data)
    g = expand.grid(.controls = cforest_unbiased(mtry = 5, ntree = 1000))
    return(g)
}
set.seed(1)
(cfMatFit <- train(as.factor(f1win) ~ .,
                   data=df,
                   method="cforest",
                   metric="ROC",
                   trControl=tc,
                   tuneGrid = createCfGrid))
Run Code Online (Sandbox Code Playgroud)

错误是 Error in as.character.default(<S4 object of class "ForestControl">) : no method for coercing this S4 class to a vector

这是因为cforest_control()无法强制转换为数据框.如果我使用,该功能可以工作:

...
g = expand.grid(.mtry = 5)
...
Run Code Online (Sandbox Code Playgroud)

但是,如果我想更改ntree,这没有任何效果:

...
g = expand.grid(.mtry = 5, .ntree = 1000)
...
Run Code Online (Sandbox Code Playgroud)

这不像randomForest那样出错.

top*_*epo 5

网格应该是一个简单的数据框,其中包含一个名为的列.mtry.代码

 g = createGrid("cforest", len, data)
Run Code Online (Sandbox Code Playgroud)

会为你生成.如果你想指定ntree你只是将一个controls对象作为另一个参数传递给train但是遗漏mtry:

 mod <- train(Species ~ ., data = iris,
              method = "cforest",
              controls = cforest_unbiased(ntree = 10))
Run Code Online (Sandbox Code Playgroud)

caret照顾mtry你的变化.

马克斯