给定一个 rpart 对象,我希望能够在到达每个叶子之前提取使用了多少个特征 . 换句话说,我想知道在为每个叶子做出分类决策时使用了多少条信息 .

例如,这是一个应用于 titanic 数据集的 rpart 对象:

library(titanic)
library(rpart)

titanic.rpart <- rpart::rpart(survived ~., data = titanic)

titanic.rpart$frame[,1:2]

以下是 frame 的重要信息:

变种

1性别2201

2年1731年

4叶1667

5级64级

10 LEAF 48

11 LEAF 16

3级470

6 LEAF 196

7 LEAF 274

frame 属性,我可以访问决策树的结构,包括到达每个节点/叶子的案例数 . 但是,我真正想知道的是,对于每个叶子,在该叶子之前发生了多少个节点?这将告诉我在每个案例被分类时查找了多少条信息 .

例如,查看泰坦尼克号树(见下图),它看起来像第一片叶片,发生在深度为4,发生在 sexage 节点之后 . 因此,这片叶子需要2条信息 . 由于1667个病例被分类在这片叶子上,这片叶子使用了1667 * 2 = 3334条信息 .

sexageclass 点头之后,下一个深度为10的叶子发生了 . 因此,这片叶子需要3条信息 . 由于48个病例被分类在这片叶子上,这片叶子使用48 * 3 = 144条信息 .

按照每个叶子的这个程序,我可以计算出使用的信息总量如下:

树中使用的总信息数= 1667 * 2 48 * 3 16 * 3 196 * 2 274 * 2 = 4466

然后,我可以将其除以案例总数,以获得每个案例使用的平均信息量为4466/2201 = 2.03 . 事实上,这真的是我最终想要的 .

这是一个问题:我可以用什么代码从 rpart 对象执行这些计算?或者更具体一点,我如何确定每个叶子在叶子之前发生了多少个节点?

enter image description here