我在玩rpart。我使用的是一家银行的play数据集,有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不修剪这棵树呢?我是不是用错了?
发布于 2014-01-28 13:05:09
在Kyphosis数据的帮助下,可以找到以下关于剪枝的解释:
>printcp(rpart.kyphosis)

printcp显示拟合的rpart对象的cp表,并基于复杂性参数打印最优剪枝的表。要确定树是否合适,或者是否需要对某些分支进行修剪,我们可以使用cptable。cptable提供了模型的总体拟合的简要摘要。从最小的树(0个拆分)到最大的一个(7个拆分)打印表格。CPtable始终列出拆分数量,而不是节点数(这是1+the拆分数量)。
有一个名为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)https://stackoverflow.com/questions/21394054
复制相似问题