首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ctree中使用tuneGrid和控件(Caret)

在ctree中使用tuneGrid和控件(Caret)
EN

Stack Overflow用户
提问于 2016-12-22 18:32:26
回答 1查看 2.4K关注 0票数 1

我在使用tuneGrid和控件选项时遇到了一个问题。在本例中,我希望设置最小标准和最大深度,但也希望指定最小桶大小。当将任何选项传递给ctree_control()时,似乎都会发生此错误。

我知道错误:

在eval(expr,envir,class )中: Fold1: mincriterion=0.95失败,maxdepth=7错误在(函数(cl,name,valueClass)中):类“maxdepth=7”对象的赋值对于类“TreeGrowControl”中的“TreeGrowControl”对象中的@‘极大深度’无效;is (值,“整数”)不是真“

这可以通过运行:

代码语言:javascript
复制
library(caret)
data("GermanCredit")

trainCtrl <- trainControl(method = 'cv', number = 2, sampling = 'down', 
verboseIter = FALSE, allowParallel = FALSE, classProbs = TRUE, 
                      summaryFunction = twoClassSummary)

tune <- expand.grid(.mincriterion = .95, .maxdepth = seq(5, 10, 2))

ctree_fit <- train(Class ~ ., data = GermanCredit, 
method = 'ctree2', trControl = trainCtrl, metric = "Sens", 
tuneGrid = tune, controls = ctree_control(minbucket = 10))

我正在尝试这种方法,基于下面发布的答案:unbiased() using caret package

从错误的外观来看,这与插入符号如何将最大深度传递给ctree有关,但我不确定这附近是否存在。直接使用ctree_control运行ctree很好。

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-22 19:31:17

在我看来这可能是个窃听器。如果您使用as.integer(),您可以使它工作。

代码语言:javascript
复制
tune <- expand.grid(.mincriterion = .95, 
                    .maxdepth = as.integer(seq(5, 10, 2)))

原因:如果您使用controls参数,那么插入符号所做的是

代码语言:javascript
复制
theDots$controls@tgctrl@maxdepth <- param$maxdepth
theDots$controls@gtctrl@mincriterion <- param$mincriterion
ctl <- theDots$controls

如果我们看一下treeControl类,它看起来如下所示

代码语言:javascript
复制
Formal class 'TreeControl' [package "party"] with 4 slots
  ..@ varctrl  :Formal class 'VariableControl' [package 
  ..@ tgctrl   :Formal class 'TreeGrowControl' [package "party"] with 4 slots

[left stuff out]

  .. .. ..@ stump         : logi FALSE
  .. .. ..@ maxdepth      : int 0
  .. .. ..@ savesplitstats: logi TRUE
  .. .. ..@ remove_weights: logi FALSE 

因此,它希望maxdepth是整数,插入符号尝试分配一个数字(可能是整数,但不是类整数),但前提是指定了controls

如果不指定controls,它就会指定

代码语言:javascript
复制
ctl <- do.call(getFromNamespace("ctree_control", "party"), 
                                      list(maxdepth = param$maxdepth,
                                           mincriterion = param$mincriterion))

...then是以一种我不完全理解的方式从那里走过来的,我现在只看一下源代码。如果你感兴趣的话,可以看看https://github.com/topepo/caret/blob/master/models/files/ctree2.R

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41289650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档