将rpart规则导出到数据帧,并链接规则以训练数据

将rpart规则导出到数据帧,并链接规则以训练数据,r,decision-tree,rpart,R,Decision Tree,Rpart,我已经用rpart训练了一些数据,并对用树终端节点标记每个观测值感兴趣, 并链接到对应于该终端节点的规则 我使用了以下代码作为示例: library(rpart) library(rattle) fit <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis) table(fit$where) rattle::asRules(fit) 第一个问题:这些标签与Crattle::asRules(fit)生成的标签不一致,它们是3,2

我已经用rpart训练了一些数据,并对用树终端节点标记每个观测值感兴趣, 并链接到对应于该终端节点的规则

我使用了以下代码作为示例:

library(rpart)
library(rattle)
fit <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis)
table(fit$where)
rattle::asRules(fit)
第一个问题:这些标签与Crattle::asRules(fit)生成的标签不一致,它们是3,23,22,10,4 如何生成两者之间的映射表

第二个问题:asRules只是打印,而我想将规则放在表中,而不是标准输出

我的预期结果是:一个数据框,在fit$where和asRules标签之间有映射,另一列的规则文本为字符串,例如:

 Rule number: 4 [Kyphosis=absent cover=29 (36%) prob=0.00]
   Start>=8.5
   Start>=14.5
如果我们可以将文本解析为ID、statistics和condition在单独的列中,那就更好了,但不是强制性的

我发现了许多相关的问题和链接,但没有找到最终答案

多谢各位, 卡马沙

进度更新29/01

如果我有规则ID,我可以通过path.rpart分别提取每个规则:

>path.rpart(fit,node=22) 

 node number: 22 
   root
   Start>=8.5
   Start< 14.5
   Age>=55
   Age>=111
因此,我仍然无法在这两个(asRules id和fit$where id)之间建立链接, 我可能遗漏了一些基本的东西,或者有一种更直接的方法来完成这项任务


您可以提供帮助吗?

您可以在使用时找到每个fit$对应的规则编号(实际上是叶节点编号)

> row.names(fit$frame)[fit$where]
 [1] "3"  "22" "3"  "3"  "4"  "4"  ...
您可能会通过以下方法更接近所需的输出:

> rattle::asRules(fit, TRUE)
R  3 [23%,0.58] Start< 8.5
R 23 [ 9%,0.57] Start>=8.5 Start< 14.5 Age>=55 Age< 111
...
>嘎嘎声::asRules(fit,TRUE)
R3[23%,0.58]开始<8.5
R 23[9%,0.57]开始>=8.5开始<14.5岁>=55岁<111岁
...

为了说明这一点,我还是用了以下方法:

[1] 对于fit$where和asRules之间的标签对齐,我使用了@Graham Williams的解决方案, 或者通过采用@VitoshKa的函数,首先获得正确的标签:

[2] 为了在数据帧中创建格式良好的规则列表,我采用并修改了TomášGreif的parse_树函数:
你的意思是这样的吗

库(rpart)
图书馆(rpart.utils)
图书馆(dplyr)
#模型

fit您可以通过以下方式获得规则(叶数):


nrules很棒的输入,rpart.utils包在这里提供了所需的值(我以前不熟悉它)
> row.names(fit$frame)[fit$where]
 [1] "3"  "22" "3"  "3"  "4"  "4"  ...
> rattle::asRules(fit, TRUE)
R  3 [23%,0.58] Start< 8.5
R 23 [ 9%,0.57] Start>=8.5 Start< 14.5 Age>=55 Age< 111
...
  Kyphosis Age Number Start Rule    Subrules
1   absent  71      3     5    3          R1
2   absent 158      3    14   22 L1,R2,R3,L4
3  present 128      4     5    3          R1
4   absent   2      5     1    3          R1
5   absent   1      4    15    4       L1,L2
6   absent   1      2    16    4       L1,L2
  Subrule Variable Value Less Greater
1      L1    Start   8.5 <NA>     8.5
2      L2    Start  14.5 <NA>    14.5
3      L3      Age  <NA>   55    <NA>
4      L4      Age   111 <NA>     111
5      R1    Start  <NA>  8.5    <NA>
6      R2    Start  <NA> 14.5    <NA>
7      R3      Age    55 <NA>      55
8      R4      Age  <NA>  111    <NA>