将rpart规则导出到数据帧,并链接规则以训练数据
我已经用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
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>