当从partykit绘制ctree
模型时,我知道它选择了一个默认值来防止过度生长的树木过度拟合。此默认值有时会导致树过于简单。为了使用后修剪技术,我想使用ctree制作一个可能完全成熟的过度拟合树,然后再进行修剪。尝试许多不同的东西,但我的代码出错了。
使用all variables to make the tree的堆栈溢出答案不是我想要的。我不一定想要所有变量,但我希望树的最大深度尽可能地过度生长。
基本上,如何让树尽可能多的深度?
请参阅下面的代码和输出:
treemodel <- ctree(Species ~ ., iris)
plot(treemodel)
我使用了包中的帮助+文档,但没有看到很多选项来自定义它。有前途的是控制参数,但文档并不十分详细。通过在其他论坛上搜索,我尝试了以下内容:
treemodel <- ctree(Species ~ ., iris, control=mincriterion)
我也尝试过:
treemodel <- ctree(Species ~ ., iris, control="mincriterion")
但是这两个代码都会抛出错误。错误:
if(sum(weights)&lt; ctrl $ minsplit)出错 return(partynode(as.integer(id))):参数长度为零
我在mac os上使用partykit 1.1-1和r。
答案 0 :(得分:3)
ctree
的 partykit
通过ctree_control
参数接受control
参数,您可以使用该参数来控制树适合的各个方面。
执行control=mincriterion
或control="mincriterion"
不正确,因此您收到错误消息。 control
期望列表包含控制参数,而不是字符值。
特别是,您想要传递以下ctree_control
:
mincriterion
:充当树的深度的“调节器”,
值越小,树木越大;当mincriterion为0.8时,
p值必须小于0.2才能使节点分裂minsplit
和minbucket
:设置为0,因此最低标准为
总是满足,因此分裂永不停止来自包的作者本身:
当标准超过给定的值时,实施拆分 ctree_control中指定的mincriterion。例如,何时 mincriterion = 0.95,p值必须小于0.05才能 拆分此节点。这种统计方法确保了 正确大小的树是在没有额外(后)修剪或生长的情况下种植的 交叉验证
因此,使用control=ctree_control()
的最终代码:
diab_model <- ctree(diabetes ~ ., diab_train, control = ctree_control(mincriterion=0.005, minsplit=0, minbucket=0))
plot(diab_model)
第一行代码通过覆盖默认值来创建决策树,第二行代码绘制ctree
对象。你会得到一棵最大深度的完全成长的树。试验mincriterion
,minsplit
和minbucket
的值。它们也可以被视为超参数。这是plot(diab_model)