gpt4 book ai didi

r - 将 rpart 规则导出到数据框并链接规则以训练数据

转载 作者:行者123 更新时间:2023-12-01 02:36:34 24 4
gpt4 key购买 nike

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

我以下面的代码为例:

library(rpart)
library(rattle)
fit <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis)
table(fit$where)
rattle::asRules(fit)

我可以通过 fit$where 标记每个观察结果,标签是:

> table(fit$where)

3 5 7 8 9
29 12 14 7 19

第一个问题:这些标签和rattle::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、统计信息和条件,那就更好了,但不是强制性的。

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

非常感谢,卡玛谢

进度更新 29/01

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

>path.rpart(fit,node=22) 

node number: 22
root
Start>=8.5
Start< 14.5
Age>=55
Age>=111

这让我将规则作为可以转换为字符串的列表。但是 ID 提示的是“asRules”功能而不是“fit$where”...

使用“partykit”得到与“fit$where”相同的结果:

library("partykit")
> table(predict(as.party(fit), type = "node"))

3 5 7 8 9
29 12 14 7 19

所以,我仍然无法在两者之间建立联系(asRules ID 和 fit$where ID),我可能遗漏了一些基本的东西,或者有更直接的方法来完成这项任务。

你能帮忙吗?

最佳答案

可以通过使用找到每个fit$where对应的规则号(其实就是叶子节点号)

> 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
...

关于r - 将 rpart 规则导出到数据框并链接规则以训练数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48489647/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com