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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...