Organizzare un albero di classificazione (in parte) in un insieme di regole?


11

C'è un modo in cui una volta costruito un albero di classificazione complesso usando rpart (in R), per organizzare le regole di decisione prodotte per ogni classe? Quindi, invece di ottenere un albero enorme, otteniamo un insieme di regole per ciascuna delle classi?

(se é cosi, come?)

Ecco un semplice esempio di codice per mostrare esempi su:

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

Grazie.

Risposte:


9

Tale funzionalità (o stretta) sembra essere disponibile nel pacchetto sonaglio , come descritto in RJournal 1/2 2009 (p. 50), anche se l'ho verificato solo dalla riga di comando.

Per il tuo esempio, produce il seguente output:

 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

Per ottenere questo output, sorgente il rattle/R/rpart.Rfile sorgente (dal pacchetto sorgente) nel mio spazio di lavoro, dopo aver rimosso le due chiamate Rtxt()nella asRules.rpart()funzione (puoi anche sostituirlo con print). Quindi scrivo e basta

> asRules(fit)

È possibile stampare regole anche per i fogli non terminali?
user1700890 il

3

Il pacchetto rpart.plot versione 3.0 (luglio 2018) ha una funzione rpart.rulesper generare un insieme di regole per un albero. Per esempio

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

Per altri esempi, vedere il capitolo 4 della vignetta rpart.plot .


Fantastico riferimento, sarebbe anche molto utile avere un numero di foglia accanto alla regola
user1700890

1
Utilizzare rpart.rules(fit, nn=TRUE)per ottenere i numeri di nodo (ovvero i numeri foglia).
Stephen Milborrow,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.