从rpart决策树中提取变量标签

问题描述 投票:0回答:1

我曾经用过一部分在具有数百个级别的分类变量的数据集上构建决策树。树根据变量的选择值拆分这些变量。我想检查进行分割的标签。

如果我只是运行决策树结果,则在控制台中列出拆分的显示将被截断,并且无论哪种方式,它的格式都不容易理解(用逗号分隔)。有没有办法将其作为R对象访问?我愿意使用另一个包来构建树。

r decision-tree rpart
1个回答
0
投票

这里的一个问题是rpart软件包中的某些功能未导出。如果您想捕获rpart:::print.rpart的输出,那么从一个可复制的示例开始:

set.seed(1)
df1 <- data.frame(y=rbinom(n=100, size=1, prob=0.5),
                  x1=rbinom(n=100, size=1, prob=0.25),
                  x2=rbinom(n=100, size=1, prob=0.75))
(r1 <- rpart(y ~ ., data=df1))

给予

n= 100 

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

1) root 100 24.960000 0.4800000  
  2) x1< 0.5 78 19.179490 0.4358974  
    4) x2>=0.5 66 15.954550 0.4090909 *
    5) x2< 0.5 12  2.916667 0.5833333 *
  3) x1>=0.5 22  5.090909 0.6363636  
    6) x2< 0.5 7  1.714286 0.4285714 *
    7) x2>=0.5 15  2.933333 0.7333333 *

[现在,看着rpart:::print.rpart,我们看到了对rpart:::labels.rpart的调用,给了我们分割线(或上面输出中“行”的名称)。 n, deviance, yval和更大的值存储在r1$frame中,可以通过检查unclass(r1)的输出来看到。缩进

因此我们可以使用]提取以上内容>

(df2 <- data.frame(split=rpart:::labels.rpart(r1), n=r1$frame$n))

给予

    split   n
1    root 100
2 x1< 0.5  78
3 x2>=0.5  66
4 x2< 0.5  12
5 x1>=0.5  22
6 x2< 0.5   7
7 x2>=0.5  15
© www.soinside.com 2019 - 2024. All rights reserved.