在绘制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")但这两种代码都会引发一个错误。错误:
如果(和(权值)< ctrl$minsplit)返回(partynode(as.integer(Id)中的错误:参数长度为零
我在mac os上使用了partykit 1.1和r。
发布于 2018-04-30 09:52:17
来自partykit的partykit通过control参数接受ctree_control参数,您可以使用该参数来控制树匹配的各个方面。
执行control=mincriterion或control="mincriterion"是不正确的,因此您将得到一个错误。control需要一个具有控制参数的列表,而不是一个字符值。
特别是,您希望将以下内容传递到ctree_control中:
mincriterion:作为树的深度的“调节器”,较小的值会导致更大的树;当最小准则为0.8时,p值必须小于0.2才能使节点分裂。minsplit和minbucket:设置为0,因此最小的条件是始终满足,因此拆分永不停止来自包的作者本身:
当标准超过ctree_control中指定的最小标准所提供的值时,将实现拆分。例如,当最小标准= 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)的输出

https://stackoverflow.com/questions/50097923
复制相似问题