Организация дерева классификации (в rpart) в набор правил?


11

Существует ли способ построения сложного дерева классификации с использованием rpart (в R) для организации правил принятия решений, создаваемых для каждого класса? Таким образом, вместо того, чтобы получить одно огромное дерево, мы получаем набор правил для каждого из классов?

(если так, то как?)

Вот простой пример кода для демонстрации примеров:

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

Спасибо.

Ответы:


9

Такая функциональность (или близкая), кажется, доступна в пакете погремушки , как описано в RJournal 1/2 2009 (стр. 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

Чтобы получить этот вывод, I источник, как rattle/R/rpart.Rисходный файл (из исходного пакета) в моем рабочем пространстве, после удаления двух вызовов Rtxt()в asRules.rpart()функции (вы также можете заменить его print). Затем я просто набираю

> asRules(fit)

Можно ли распечатать правила и для нетерминальных листов?
user1700890

3

В пакете rpart.plot версии 3.0 (июль 2018 года) есть функция 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

Дополнительные примеры см. В главе 4 виньетки rpart.plot .


Крутая ссылка, также было бы очень полезно иметь номер листа рядом с правилом
user1700890

1
Используйте, rpart.rules(fit, nn=TRUE)чтобы получить номера узлов (также известные как номера листьев).
Стивен Милборроу
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.