【问题标题】:Regression tree with simulated data - rpart package带有模拟数据的回归树 - rpart 包
【发布时间】:2018-03-09 06:38:23
【问题描述】:

我已经模拟了一些数据来创建一个具有 3 个终端节点的回归树:

set.seed(1988)
n=1000
X1<-rnorm(n,mean=0,sd=2)
X2<-rnorm(n,mean=0,sd=2)
e<-rnorm(n)
Y=5*I(X1<1)*I(X2<0.2)+4*I(X1<1)*I(X2>=0.2)+3*I(X1>=1)+e
mydat=as.data.frame(cbind(Y,X1,X2))

所以,我想先用 X1

如果我运行在 RPART 包中实现的过程,在上述情况下一切正常。

mytree<-rpart(Y~.,data=mydat)
mytree

输出:

node), split, n, deviance, yval
      * denotes terminal node

1) root 1000 1627.0670 4.043696  
  2) X1>=0.9490461 326  373.8485 3.124825 *
  3) X1< 0.9490461 674  844.8367 4.488135  
    6) X2>=0.2488142 327  312.7506 3.970742 *
    7) X2< 0.2488142 347  362.0582 4.975708 *

如果我尝试系数全部为负,它也会运行。 但是当我尝试在最终术语中生成一些负值和一些正值时(这意味着在树的“交互”中,因此拆分在第二级进行划分),RPART 更改拆分的顺序和值叶子中的不正确:

Y=-5*I(X1<1)*I(X2<0.2)+4*I(X1<1)*I(X2>=0.2)+3*I(X1>=1)+e
mydat=as.data.frame(cbind(Y,X1,X2))

mytree<-rpart(Y~.,data=mydat)
mytree

输出:

  node), split, n, deviance, yval
      * denotes terminal node

1) root 1000 17811.4000  0.6136962  
  2) X2< 0.1974489 515  8116.5350 -2.3192910  
    4) X1< 1.002815 343   359.7394 -5.0305350 *
    5) X1>=1.002815 172   207.4313  3.0874360 *
  3) X2>=0.1974489 485   560.3419  3.7281050 *

有人对这个问题有什么想法吗?

谢谢

【问题讨论】:

    标签: r split rpart


    【解决方案1】:

    您需要调整复杂度参数cp。请参阅下面的代码。

    # Data Generating Process
    set.seed(1988)
    n=1000
    X1<-rnorm(n,mean=0,sd=2)
    X2<-rnorm(n,mean=0,sd=2)
    e<-rnorm(n)
    Y=-5*I(X1<1)*I(X2<0.2)+4*I(X1<1)*I(X2>=0.2)+3*I(X1>=1)+e
    mydat=as.data.frame(cbind(Y,X1,X2))
    
    library(rpart)
    mytree<-rpart(Y~.,data=mydat, cp=0.0001)
    
    # Plot the cross-validation error vs the complexity parameter
    plotcp(mytree)
    

    # Find the optimal value of the complexity parameter cp
    optcp <- mytree$cptable[which.min(mytree$cptable[,4]),1]
    
    # Prune the tree using the optial complexity parameter
    mytree <- prune(mytree,optcp)
    

    修剪后的树正确地代表了底层数据生成过程

    library(rattle)
    fancyRpartPlot(mytree)
    

    【讨论】:

      猜你喜欢
      • 2012-10-03
      • 2015-09-18
      • 1970-01-01
      • 2011-07-03
      • 2015-05-21
      • 2015-02-17
      • 1970-01-01
      • 1970-01-01
      • 2020-05-11
      相关资源
      最近更新 更多