Организация дерева классификации (в 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)чтобы получить номера узлов (также известные как номера листьев).
Стивен Милборроу