将分类树(在 rpart 中)组织成一组规则?

机器算法验证 r 分类 大车 rpart
2022-03-03 19:47:13

有没有一种方法可以在使用 rpart(在 R 中)构建复杂的分类树后,组织为每个类生成的决策规则?所以不是得到一棵巨大的树,而是为每个类得到一组规则?

(如果有,怎么做?)

这是一个简单的代码示例,用于显示示例:

fit <- rpart(Kyphosis ~ Age + Number + Start, data=kyphosis)

谢谢。

2个回答

如RJournal 1/2 2009 (p. 50) 中所述,这样的功能(或接近的功能)似乎在摇铃包中可用,尽管我只从命令行检查了它。

对于您的示例,它产生以下输出:

 Rule number: 3 [Kyphosis=present cover=19 (23%) prob=0.58]
   Start< 8.5

 Rule number: 23 [Kyphosis=present cover=7 (9%) prob=0.57]
   Start>=8.5
   Start< 14.5
   Age>=55
   Age< 111

 Rule number: 22 [Kyphosis=absent cover=14 (17%) prob=0.14]
   Start>=8.5
   Start< 14.5
   Age>=55
   Age>=111

 Rule number: 10 [Kyphosis=absent cover=12 (15%) prob=0.00]
   Start>=8.5
   Start< 14.5
   Age< 55

 Rule number: 4 [Kyphosis=absent cover=29 (36%) prob=0.00]
   Start>=8.5
   Start>=14.5

为了得到这个输出,我rattle/R/rpart.R在我的工作区中获取源文件(来自源包),在删除函数中的两个调用之后Rtxt()asRules.rpart()你也可以用 替换它print)。然后,我只需输入

> asRules(fit)

rpart.plot 包版本 3.0(2018 7 月)具有 rpart.rules为树生成一组规则的功能。例如

library(rpart.plot)
fit <- rpart(Kyphosis ~ Age + Number + Start, data=kyphosis)
rpart.rules(fit)

Kyphosis
    0.00 when Start >=      15
    0.00 when Start is 9 to 15 & Age <  55
    0.14 when Start is 9 to 15 & Age >=       111
    0.57 when Start is 9 to 15 & Age is 55 to 111
    0.58 when Start <  9

有关更多示例,请参阅rpart.plot vignette的第 4 章