【问题标题】:Make overfitting tree with maximum depth using ctree使用 ctree 制作具有最大深度的过拟合树
【发布时间】:2018-10-10 09:30:15
【问题描述】:

当从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)

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

【问题讨论】:

  • 也许只需使用 treerpart 包来获得一棵完全长大的树。
  • 有理由推荐 tree 或 rpart 而不是 ctree?我正在学习教程并希望尽可能地坚持教程课程,但我感谢您的建议谢谢!

标签: r party ctree


【解决方案1】:

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

执行control=mincriterioncontrol="mincriterion" 是不正确的,因此会出现错误。 control 需要一个带有控制参数的列表,而不是一个字符值。

特别是,您希望将以下内容传递给ctree_control

  • mincriterion:充当树深度的“调节器”, 较小的值会导致较大的树;当 mincriterion 为 0.8 时, p 值必须小于 0.2 才能使节点分裂
  • minsplitminbucket:设置为 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 对象。你会得到一棵完全成熟的树,深度最大。试验mincriterionminsplitminbucket 的值。它们也可以被视为超参数。这是plot(diab_model)的输出

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-04
    • 2015-10-11
    • 1970-01-01
    • 2016-01-24
    • 2014-02-09
    • 2016-08-26
    • 2015-02-12
    • 2016-10-18
    相关资源
    最近更新 更多