Einen Klassifikationsbaum (in rpart) in ein Regelwerk organisieren?

11

Gibt es eine Möglichkeit, nach Erstellung eines komplexen Klassifizierungsbaums mit rpart (in R) die für jede Klasse erstellten Entscheidungsregeln zu organisieren? Anstatt also einen riesigen Baum zu bekommen, bekommen wir eine Reihe von Regeln für jede der Klassen?

(Wenn das so ist, wie?)

Hier ist ein einfaches Codebeispiel, um Beispiele zu zeigen:

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

Vielen Dank.

Tal Galili
quelle

Antworten:

9

Eine solche Funktionalität (oder eine enge one) scheint in die verfügbar zu sein Rattern Paket, wie beschrieben in RJournal 1/2 2009 (Seite 50), obwohl ich es von der Befehlszeile nur überprüft.

In Ihrem Beispiel wird die folgende Ausgabe ausgegeben:

 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

Um diese Ausgabe zu erhalten, beziehe ich die rattle/R/rpart.RQuelldatei (aus dem Quellpaket) in meinem Arbeitsbereich, nachdem ich die beiden Aufrufe Rtxt()in der asRules.rpart()Funktion entfernt habe (Sie können sie auch durch ersetzen print). Dann tippe ich einfach

> asRules(fit)
chl
quelle
Ist es möglich, Regeln auch für nicht-terminale Blätter zu drucken?
user1700890
3

Das Paket rpart.plot Version 3.0 (Juli 2018) verfügt über eine Funktion rpart.ruleszum Generieren eines Regelsatzes für einen Baum. Beispielsweise

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

gibt

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

Weitere Beispiele finden Sie in Kapitel 4 der Vignette rpart.plot .

Stephen Milborrow
quelle
Fantastische Referenz, es wäre auch sehr hilfreich,
Blattnummer
1
Verwenden Sie rpart.rules(fit, nn=TRUE)diese Option , um die Knotennummern (auch Blattnummern genannt) abzurufen.
Stephen Milborrow