Mengorganisir pohon klasifikasi (dalam rpart) ke dalam seperangkat aturan?

11

Apakah ada cara yang pernah pohon klasifikasi kompleks dibangun menggunakan rpart (dalam R), untuk mengatur aturan keputusan yang dihasilkan untuk setiap kelas? Jadi alih-alih mendapatkan satu pohon besar, kita mendapatkan seperangkat aturan untuk masing-masing kelas?

(jika demikian, bagaimana?)

Berikut adalah contoh kode sederhana untuk menunjukkan contoh di:

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

Terima kasih.

Tal Galili
sumber

Jawaban:

9

Fungsionalitas seperti itu (atau yang dekat) tampaknya tersedia dalam paket rattle , seperti yang dijelaskan dalam RJournal 1/2 2009 (hlm. 50), walaupun saya hanya memeriksanya dari baris perintah.

Sebagai contoh Anda, ini menghasilkan output berikut:

 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

Untuk mendapatkan hasil ini, saya sumber rattle/R/rpart.Rfile sumber (dari paket sumber) di ruang kerja saya, setelah menghapus dua panggilan ke Rtxt()dalam asRules.rpart()fungsi (Anda juga dapat menggantinya dengan print). Lalu, saya cukup mengetik

> asRules(fit)
chl
sumber
Apakah mungkin untuk mencetak aturan untuk daun non-terminal juga?
user1700890
3

The rpart.plot paket versi 3.0 (Juli 2018) memiliki fungsi rpart.rulesuntuk menghasilkan satu set aturan untuk pohon. Sebagai contoh

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

memberi

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

Untuk lebih banyak contoh, lihat Bab 4 sketsa rpart.plot .

Stephen Milborrow
sumber
Referensi yang luar biasa, juga akan sangat membantu untuk memiliki nomor daun di sebelah aturan
user1700890
1
Gunakan rpart.rules(fit, nn=TRUE)untuk mendapatkan nomor simpul (alias nomor daun).
Stephen Milborrow