Впорядкування дерева класифікації (в 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

Щоб отримати цей вихід, я видаю rattle/R/rpart.Rвихідний файл (з вихідного пакета) у своїй робочій області, після видалення двох викликів Rtxt()у asRules.rpart()функції (ви також можете замінити його на print). Потім я просто набираю

> asRules(fit)

Чи можливо також надрукувати правила для нетермінових листів?
користувач1700890

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)для отримання номерів вузлів (aka номера листів).
Стівен Мілборроу
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.