微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

RPART中的复杂性参数:精确定义

如何解决RPART中的复杂性参数:精确定义

基于rpart文档,给我的印象是,如果我打电话给

rpart(y ~ X1 + X2,control=rpart.control(cp=0.05))

rpart甚至不会尝试进行“ R ^ 2的改进”不超过0.05的任何拆分。我认识到,这与“复杂性参数”在成本复杂性修剪中的含义略有不同(在此过程中,您首先构建一棵大树,然后修剪最弱的链接,以使自己进行拆分不会带来太多的后果)局部改善,但可以在下面进行更优化的划分)。但这确实从rpart文档中听起来很像cp在构建过程中在本地使用。

但是,下面的示例使其他事情似乎正在发生,当然,似乎确实造成了分裂,我认为应该用cp参数排除该分裂。如果有人能够提供见解,我将不胜感激-只是要确保我了解rpart参数。

#### Generate some simple data
set.seed(5)
X1 <-runif(100,-1,1)
X2 <- runif(100,1)
y <- 2*(X1 > 0 & X2 < 0) +  2*(X1 < 0 & X2 > 0) - 2*(X1 > 0 & X2 > 0) - 2*(X1 < 0 & X2 < 0) + rnorm(100,sd=1)


#### A tree with no cp used. 
tree2 <- rpart(y ~ X1 + X2,control=rpart.control(cp=0),method="anova")

### According to both my own calculations and the "improve" column in tree2$splits,### the first split only improves the fit by 0.0262. 
tree2$splits[1,]
sst <- sum((y - mean(y))^2)
SSE1split <- sum((y[X1 >= -0.4404514] - mean(y[X1 >= -0.4404514]))^2) + 
  sum((y[X1 < -0.4404514] - mean(y[X1 < -0.4404514]))^2)

(sst - SSE1split)/sst
tree2$splits[2,]

### From my understanding of the documentation,this means that if cp=0.05,rpart should
### not even attempt the first split. But it does!
rpart(y ~ X1 + X2,control=rpart.control(cp=0.05),method="anova")

任何人都可以解释为什么最后一行代码形成具有多个拆分的树,即使第一个吐口并没有将拟合优度提高至少CP的原因?

谢谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。