8

在 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)?

4

2 回答 2

3

使用该rpart()功能控制该rpart.control()功能。它具有参数,例如minsplitwhich 告诉函数仅在观察值多于指定值cp时才进行拆分,以及告诉函数仅在整体缺乏拟合减少 1 倍时才拆分cp。如果您查看summary(fit)上面的示例,它会显示所有值的统计信息nsplit。要在使用时打印这些值,您printcp(fit)需要在调用原始函数时选择适当的值。cpminsplitrpart

于 2015-03-09T17:42:22.043 回答
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**))
于 2015-03-09T18:01:16.280 回答