使用caret包运行控制cforest_unbiased()的cforest。

4
我可以使用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))

错误为: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)
...

然而,如果我想改变ntree,这没有任何影响:
...
g = expand.grid(.mtry = 5, .ntree = 1000)
...

这个不像randomForest一样会出错。

1
你也应该用 [caret] 给它打上标签。 - topepo
1个回答

6
网格应该是一个简单的数据框,其中包含一个名为.mtry的列。 代码
 g = createGrid("cforest", len, data)

这将为您生成结果。如果您想指定ntree,只需将controls对象作为另一个参数传递给train,但不包括mtry

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

caret会自动为您更改mtry

Max


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接