我想使用插入包运行一个没有偏见的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那样出错。
答案 0 :(得分:5)
网格应该是一个简单的数据框,其中包含一个名为.mtry
的列。代码
g = createGrid("cforest", len, data)
将为您生成。如果您要指定ntree
,只需将controls
对象作为另一个参数传递给train
,但忽略mtry
:
mod <- train(Species ~ ., data = iris,
method = "cforest",
controls = cforest_unbiased(ntree = 10))
caret
负责为您更改mtry
。
最高