R中的分类树模拟研究

时间:2017-10-02 18:38:50

标签: tree classification cart rpart

我试图找出如何编写代码以从分类树生成数据以进行模拟研究。让我们说我有3个多变量正态随机变量。我将使用以下代码在R中生成它们,

set.seed(1612)
library(MASS)
Sigma <- matrix(c(0.277312, 0.1213606, 0.05482612, 0.1213606, 0.5968614, 0.2171699, 0.05482612, 0.2171699, 0.5036522), nrow = 3)
X  <- mvrnorm(n = 1272, mu = rep(0, 3), Sigma = Sigma)
colnames(X) <- paste0("X", 1:3)
pred <- data.frame(X)

然后我想根据以下规则将Y分类为(即1):

  • 如果X1 <= 0且X2 <= 0

  • 如果X1> 0和X3 <= 0

我会使用以下代码执行此操作,并使用rpart拟合树。

y <- ifelse(pred$X1 <= 0 & pred$X2 <= 0, 1, ifelse(pred$X1 > 0 & pred$X3 <= 0, 1, 0))
library(rpart)
mod <- rpart(y ~ ., data = pred, method = "class")
mod

mod
n= 1272 

node), split, n, loss, yval, (yprob)
     * denotes terminal node

1) root 1272 636 0 (0.5000000 0.5000000)  
 2) X3>=-0.001090791 663 126 0 (0.8099548 0.1900452)  
  4) X2>=-0.002500219 420   0 0 (1.0000000 0.0000000) *
  5) X2< -0.002500219 243 117 1 (0.4814815 0.5185185)  
   10) X1>=0.001410812 117   0 0 (1.0000000 0.0000000) *
   11) X1< 0.001410812 126   0 1 (0.0000000 1.0000000) *
3) X3< -0.001090791 609  99 1 (0.1625616 0.8374384)  
  6) X2>=0.00167211 227  99 1 (0.4361233 0.5638767)  
   12) X1< -0.000418794 99   0 0 (1.0000000 0.0000000) *
   13) X1>=-0.000418794 128   0 1 (0.0000000 1.0000000) *
 7) X2< 0.00167211 382   0 1 (0.0000000 1.0000000) *

然而,我似乎无法完全恢复我的树(注意x3出现在树的顶部)。我相信我生成的数据不正确,但我不确定如何正确生成数据。我应该为Y条件生成数据,反之亦然(我在这里做过)​​。我也知道我目前在我的Y中没有错误,并且如果我将Y设置为我的条件的概率接近1的伯努利随机变量可能会引入错误(但是,这似乎并没有解决我的问题) 。

任何帮助都会受到欢迎,因为我在搜索中找不到任何内容。

0 个答案:

没有答案