rpart中CP表给出的树大小

时间:2015-01-09 14:03:40

标签: r tree decision-tree cross-validation rpart

在R包rpart中,是什么决定了CP表中为决策树提供的树的大小?在下面的示例中,CP表默认只显示具有1,2和5个节点的树(分别为nsplit = 0,1和4)。

library(rpart)   
fit <- rpart(Kyphosis ~ Age + Number + Start, method="class", data=kyphosis)
> printcp(fit) 

Classification tree:
rpart(formula = Kyphosis ~ Age + Number + Start, data = kyphosis, 
method = "class")

Variables actually used in tree construction:
[1] Age   Start

Root node error: 17/81 = 0.20988

n= 81 

        CP nsplit rel error  xerror    xstd
1 0.176471      0   1.00000 1.00000 0.21559
2 0.019608      1   0.82353 0.94118 0.21078
3 0.010000      4   0.76471 0.94118 0.21078

是否有一个固有的规则rpart()用于确定要呈现的树木大小?是否可以强制printcp()返回所有可能大小的树的交叉验证统计信息,即对于上面的示例,还包括具有3和4个节点的树的行(nsplit = 2,3)?

2 个答案:

答案 0 :(得分:3)

使用rpart()函数控制rpart.control()函数。它有minsplit这样的参数,它告诉函数只有在有更多的观察值时才会分割,然后是指定的值和cp,它告诉函数只有在整体缺乏拟合的情况下才会分裂。 cp。 如果您在上面的示例中查看summary(fit),则会显示nsplit的所有值的统计信息。要在使用printcp(fit)时打印这些值,您需要在调用原始cp函数时选择minsplitrpart的相应值。

答案 1 :(得分:1)

关于rpart的cran-r文档提到将选项cp = 0添加到rpart函数。 http://cran.r-project.org/web/packages/rpart/vignettes/longintro.pdf 它还提到了可以在rpart函数中给出的其他选项,例如用于控制分割的数量。

    dfit <- rpart(y ~ x, method='class',
            control = rpart.control(xval = 10, minbucket = 2, **cp = 0**))