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