我正在玩rpart。我正在使用一个5000行的游戏数据集,有7个IV,该类有2个因素。
原始模型是(没有设置控制参数):
UB_rpart <- rpart(UB_tree, method="class", data=UBank_train)
然后我在rpart.plot中创建一个没有问题的树。
然后我尝试通过添加一些控制参数来修剪树:
Pruned_UB_rpart <-prune(UB_rpart,cp=.01, minsplit=10, minbucket=round(minsplit/3))
我绘制了修剪过的树,看起来与第一棵树相同。我不断改变minsplit(甚至高达1000),看它何时改变。树永远不会改变。
然而,当我将cp更改为.05时,树会发生变化。
为什么minsplit没有修剪树。我没有正确使用它吗?
答案 0 :(得分:1)
在Kyphosis数据的帮助下找到以下关于修剪的解释:
>printcp(rpart.kyphosis)
printcp
显示适合的rpart对象的cp表,并打印一个最佳修剪表
基于复杂性参数。确定树是否合适或是否为某些树
分支需要进行修剪我们可以使用cptable。
cptable简要概述了模型的整体拟合。桌子被打印出来了
从最小的树(0个分裂)到最大的一个(7个分裂)。 CPtable总是列出数量
拆分而不是节点数(1 =拆分数)。
有一个名为1 SE rule
的规则可用于查找最佳分割数。根据这条规则
取smallest Xerror (1.2941)
并添加相应的standard error (0.2355)
。
求它得到1.5296
。我们需要找到分裂最少但比这个小的分裂
数。实际上,所有4个都适合这个范围。所以,我们采用fewest (nsplit=0)
和。{
相应的CP value (0.176)
并将其用于prune
。
>fit2 = prune(rpart.kyphosis,cp=0.176)