使用ctree制作具有最大深度的过拟合树
Make overfitting tree with maximum depth using ctree
当从 partykit 绘制一个 ctree
模型时,我知道它选择了一个默认值 ose 以防止与过度生长的树木过度拟合。此默认值有时会导致树过于简单。要使用 post 修剪技术,我想使用 ctree 制作一棵可能完全成熟的过度拟合树,然后再进行修剪。尝试许多不同的事情,但我的代码出现错误。
这个关于使用 all variables to make the tree 的堆栈溢出答案不是我想要的。我不一定想要所有变量,但我希望树的最大深度像 possible.
一样长满
基本上,如何让树的深度达到 possible 的深度?
查看下面的代码和输出:
treemodel <- ctree(Species ~ ., iris)
plot(treemodel)
我使用包中的帮助 + 文档,但没有看到很多选项来自定义它。有希望的一个是控制参数,但文档不是很详细。通过在其他论坛上搜索,我尝试了以下内容:
treemodel <- ctree(Species ~ ., iris, control=mincriterion)
我也试过:
treemodel <- ctree(Species ~ ., iris, control="mincriterion")
但是这两个代码都会抛出错误。错误:
Error in if (sum(weights) < ctrl$minsplit)
return(partynode(as.integer(id))) : argument is of length zero
我在 mac os 上使用 partykit 1.1-1 和 r。
ctree
from partykit
通过 control
参数接受 ctree_control
参数,您可以使用该参数来控制树拟合的各个方面。
做control=mincriterion
或control="mincriterion"
是不正确的,因此你会得到一个错误。 control
需要一个包含控制参数的列表,而不是字符值。
特别是,您想将以下内容传递给 ctree_control
:
mincriterion
:作为树的深度的"regulator",
较小的值会导致较大的树;当mincriterion为0.8时,
p 值必须小于 0.2 才能使节点分裂
minsplit
和 minbucket
:设置为 0 所以最小标准是
总是相遇所以分裂永不停止
来自包的作者本身:
A split is implemented when the criterion exceeds the value given by
mincriterion as specified in ctree_control. For example, when
mincriterion = 0.95, the p-value must be smaller than 0.05 in order to
split this node. This statistical approach ensures that the
right-sized tree is grown without additional (post-)pruning or
cross-validation
因此,最终代码使用 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)
的输出
当从 partykit 绘制一个 ctree
模型时,我知道它选择了一个默认值 ose 以防止与过度生长的树木过度拟合。此默认值有时会导致树过于简单。要使用 post 修剪技术,我想使用 ctree 制作一棵可能完全成熟的过度拟合树,然后再进行修剪。尝试许多不同的事情,但我的代码出现错误。
这个关于使用 all variables to make the tree 的堆栈溢出答案不是我想要的。我不一定想要所有变量,但我希望树的最大深度像 possible.
一样长满基本上,如何让树的深度达到 possible 的深度?
查看下面的代码和输出:
treemodel <- ctree(Species ~ ., iris)
plot(treemodel)
我使用包中的帮助 + 文档,但没有看到很多选项来自定义它。有希望的一个是控制参数,但文档不是很详细。通过在其他论坛上搜索,我尝试了以下内容:
treemodel <- ctree(Species ~ ., iris, control=mincriterion)
我也试过:
treemodel <- ctree(Species ~ ., iris, control="mincriterion")
但是这两个代码都会抛出错误。错误:
Error in if (sum(weights) < ctrl$minsplit) return(partynode(as.integer(id))) : argument is of length zero
我在 mac os 上使用 partykit 1.1-1 和 r。
ctree
from partykit
通过 control
参数接受 ctree_control
参数,您可以使用该参数来控制树拟合的各个方面。
做control=mincriterion
或control="mincriterion"
是不正确的,因此你会得到一个错误。 control
需要一个包含控制参数的列表,而不是字符值。
特别是,您想将以下内容传递给 ctree_control
:
mincriterion
:作为树的深度的"regulator", 较小的值会导致较大的树;当mincriterion为0.8时, p 值必须小于 0.2 才能使节点分裂minsplit
和minbucket
:设置为 0 所以最小标准是 总是相遇所以分裂永不停止
来自包的作者本身:
A split is implemented when the criterion exceeds the value given by mincriterion as specified in ctree_control. For example, when mincriterion = 0.95, the p-value must be smaller than 0.05 in order to split this node. This statistical approach ensures that the right-sized tree is grown without additional (post-)pruning or cross-validation
因此,最终代码使用 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)