rpart.control minsplit不改变树

时间:2014-01-27 23:38:55

标签: r decision-tree rpart

我正在玩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没有修剪树。我没有正确使用它吗?

1 个答案:

答案 0 :(得分:1)

在Kyphosis数据的帮助下找到以下关于修剪的解释:

>printcp(rpart.kyphosis)  

enter image description here 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)