给定一个 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,发生在 sex
和 age
节点之后 . 因此,这片叶子需要2条信息 . 由于1667个病例被分类在这片叶子上,这片叶子使用了1667 * 2 = 3334条信息 .
在 sex
, age
和 class
点头之后,下一个深度为10的叶子发生了 . 因此,这片叶子需要3条信息 . 由于48个病例被分类在这片叶子上,这片叶子使用48 * 3 = 144条信息 .
按照每个叶子的这个程序,我可以计算出使用的信息总量如下:
树中使用的总信息数= 1667 * 2 48 * 3 16 * 3 196 * 2 274 * 2 = 4466
然后,我可以将其除以案例总数,以获得每个案例使用的平均信息量为4466/2201 = 2.03 . 事实上,这真的是我最终想要的 .
这是一个问题:我可以用什么代码从 rpart
对象执行这些计算?或者更具体一点,我如何确定每个叶子在叶子之前发生了多少个节点?