首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用ctree制作最大深度的超拟合树

用ctree制作最大深度的超拟合树
EN

Stack Overflow用户
提问于 2018-04-30 09:46:01
回答 1查看 2.6K关注 0票数 4

在绘制partykit的ctree模型时,我了解到它选择了一个默认值,以防止过度适应过度生长的树木。此默认值有时会导致过于简单的树。为了使用修剪后的技术,我想用ctree制作一棵可能完全生长的过合适的树,然后在以后进行剪枝。尝试许多不同的事情,但是我的代码出现了错误。

在使用all variables to make the tree时,这个堆栈溢出响应不是我想要的。我不一定要所有的变量,但我希望树的最大深度越长越好。

基本上,如何让树走得越深越好?

见下面的代码和输出:

代码语言:javascript
复制
treemodel <- ctree(Species ~ ., iris)
plot(treemodel)

我使用包中的帮助+文档,但是没有看到很多选项来定制它。最有希望的是控制参数,但文档并不是很详细。在其他论坛上搜索时,我做了以下尝试:

代码语言:javascript
复制
treemodel <- ctree(Species ~ ., iris, control=mincriterion)

我也试过:

代码语言:javascript
复制
treemodel <- ctree(Species ~ ., iris, control="mincriterion")

但这两种代码都会引发一个错误。错误:

如果(和(权值)< ctrl$minsplit)返回(partynode(as.integer(Id)中的错误:参数长度为零

我在mac os上使用了partykit 1.1和r。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-30 09:52:17

来自partykitpartykit通过control参数接受ctree_control参数,您可以使用该参数来控制树匹配的各个方面。

执行control=mincriterioncontrol="mincriterion"是不正确的,因此您将得到一个错误。control需要一个具有控制参数的列表,而不是一个字符值。

特别是,您希望将以下内容传递到ctree_control中:

  • mincriterion:作为树的深度的“调节器”,较小的值会导致更大的树;当最小准则为0.8时,p值必须小于0.2才能使节点分裂。
  • minsplitminbucket:设置为0,因此最小的条件是始终满足,因此拆分永不停止

来自包的作者本身:

当标准超过ctree_control中指定的最小标准所提供的值时,将实现拆分。例如,当最小标准= 0.95时,p值必须小于0.05才能拆分此节点。这种统计方法确保了适当大小的树是在没有额外(后)修剪或交叉验证的情况下生长的。

因此,使用control=ctree_control()的最终代码

代码语言:javascript
复制
diab_model <- ctree(diabetes ~ ., diab_train, control = ctree_control(mincriterion=0.005, minsplit=0, minbucket=0))
plot(diab_model)

第一行代码通过覆盖默认值创建决策树,第二行代码绘制ctree对象。你会得到一棵完全生长的树,它的深度是最大的。用mincriterionminsplitminbucket的值进行实验。它们也可以被看作是一个超参数。这是plot(diab_model)的输出

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

https://stackoverflow.com/questions/50097923

复制
相关文章

相似问题

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