从 rpart 包中的决策规则中提取信息
Posted
技术标签:
【中文标题】从 rpart 包中的决策规则中提取信息【英文标题】:Extracting Information from the Decision Rules in rpart package 【发布时间】:2016-07-23 22:06:44 【问题描述】:我需要从决策树的规则中提取信息。我在 R 中使用 rpart 包。我使用包中的演示数据来解释我的要求:
data(stagec)
fit<- rpart(formula = pgstat ~ age + eet + g2 + grade + gleason + ploidy, data = stagec, method = "class", control=rpart.control(cp=0.05))
fit
印花合身展示
n= 146
node), split, n, loss, yval, (yprob)
* denotes terminal node
1) root 146 54 0 (0.6301370 0.3698630)
2) grade< 2.5 61 9 0 (0.8524590 0.1475410) *
3) grade>=2.5 85 40 1 (0.4705882 0.5294118)
6) g2< 13.2 40 17 0 (0.5750000 0.4250000)
12) ploidy=diploid,tetraploid 31 11 0 (0.6451613 0.3548387) *
13) ploidy=aneuploid 9 3 1 (0.3333333 0.6666667) *
7) g2>=13.2 45 17 1 (0.3777778 0.6222222)
14) g2>=17.91 22 8 0 (0.6363636 0.3636364) *
15) g2< 17.91 23 3 1 (0.1304348 0.8695652) *
例如我想为第 12 个节点获取如下信息
如果等级>=2.5 且 g2
谢谢
【问题讨论】:
也许你可以使用list.rules.rpart()
作为基础:library(rpart);fit <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis);list.rules.rpart(fit)
。
【参考方案1】:
rpart.plot
包版本 3.0(2018 年 7 月)有一个功能
rpart.rules
用于为树生成一组规则。例如
library(rpart.plot)
data(stagec)
fit <- rpart(formula = pgstat ~ ., data = stagec, method = "class", control=rpart.control(cp=0.05))
rpart.rules(fit)
给予
pgstat
0.15 when grade < 3
0.35 when grade >= 3 & g2 < 13 & ploidy is diploid or tetraploid
0.36 when grade >= 3 & g2 >= 18
0.67 when grade >= 3 & g2 < 13 & ploidy is aneuploid
0.87 when grade >= 3 & g2 is 13 to 18
和
rpart.rules(fit, roundint=FALSE, clip.facs=TRUE)
给予
pgstat
0.15 when grade < 2.5
0.35 when grade >= 2.5 & g2 < 13 & diploid or tetraploid
0.36 when grade >= 2.5 & g2 >= 18
0.67 when grade >= 2.5 & g2 < 13 & aneuploid
0.87 when grade >= 2.5 & g2 is 13 to 18
有关更多示例,请参阅第 4 章 rpart.plot vignette.
【讨论】:
我不断收到以下错误:Error in rpart.rules(fit) : could not find function "rpart.rules"
。你知道为什么吗?
我的适合是有效的(至少从我绘制它和添加文本覆盖的能力来看)
当我重新启动我的 R 会话时,加载 rpart
并检查包含的方法,rpart.rules
未列出。
请注意rpart.rules
是rpart.plot
包的一部分(不是rpart
包),因此请确保在调用rpart.rules
之前使用library(rpart.plot)
。还要确保您使用的是 rpart.plot
包版本 3.0.0 或更高版本。
@StephenMilborrow:如果你有时间,可以看看我的问题吗? ***.com/questions/65679523/… (注意:我使用的计算机没有互联网接入或 USB 端口,我只有 R 和一些预装的库。我有“rpart”但我无法安装“rpart.plot”库。因此,我正在寻找一种仅使用 rpart、base R、party 和 partykit 来获取决策规则的方法。我在同一个 *** 页面上咨询了你下面的答案,它有效 - 但我无法获得完整的规则。谢谢你所有的帮助【参考方案2】:
您可以使用partykit 包中的list.rules.party()
函数和一些字符串格式。这是使用您的代码的示例。
data(stagec)
fit <- rpart(
formula = pgstat ~ age + eet + g2 + grade + gleason + ploidy,
data = stagec,
method = "class",
control = rpart.control(cp = 0.05)
)
party_obj <- as.party.rpart(fit, data = TRUE)
decisions <- partykit:::.list.rules.party(party_obj)
cat(paste(decisions, collapse = "\n"))
如您所见,您以相同的方式构建树模型。然后将模型转换为派对对象并使用list.rules.party()
函数提取决策字符串。稍微格式化一下,你就得到了
grade < 2.5
grade >= 2.5 & g2 < 13.2 & ploidy %in% c("diploid", "tetraploid")
grade >= 2.5 & g2 < 13.2 & ploidy %in% c("aneuploid")
grade >= 2.5 & g2 >= 13.2 & g2 >= 17.91
grade >= 2.5 & g2 >= 13.2 & g2 < 17.91
结果。
【讨论】:
很好的答案!我刚刚对我的数据进行了尝试,它奏效了。我只是有一个问题:当我尝试我的代码时(在这里:***.com/questions/65679523/…).... "cat(paste(decisions, collapse = "\n"))" 这一行不会告诉我响应的类别该行将导致的变量。如果您有时间,可以看看吗?谢谢!以上是关于从 rpart 包中的决策规则中提取信息的主要内容,如果未能解决你的问题,请参考以下文章