Vom Rpart-Paket generierte Testregeln

Ich möchte eine aus einem Baum generierte Regel programmgesteuert testen. In den Bäumen könnte der Weg zwischen Wurzel und Blatt (Endknoten) in der Regel interpretiert werden.

In R könnten wir das verwendenrpart paket und mache folgendes: (In diesem Beitrag verwende ich dasiris Datensatz, nur zum Beispiel)

library(rpart)
model <- rpart(Species ~ ., data=iris)

Mit diesen beiden Zeilen bekam ich einen Baum mit dem Namenmodel, dessen klasse istrpart.object (rpart Dokumentation, Seite 21). Dieses Objekt enthält viele Informationen und unterstützt eine Vielzahl von Methoden. Insbesondere hat das Objekt eineframe Variable (auf die standardmäßig zugegriffen werden kann:model$frame) (idem) und die Methodepath.rpath (rpart Dokumentation, Seite 7), die den Pfad vom Wurzelknoten zum gewünschten Knoten angibt (node Argument in der Funktion)

Dasrow.names desframe Variable enthält die Knotennummern des Baumes. Dasvar Spalte gibt die Split-Variable im Knoten,yval der angepasste Wert undyval2 Klassenwahrscheinlichkeiten und andere Informationen.

> model$frame
           var   n  wt dev yval complexity ncompete nsurrogate     yval2.1     yval2.2     yval2.3     yval2.4     yval2.5     yval2.6     yval2.7
1 Petal.Length 150 150 100    1       0.50        3          3  1.00000000 50.00000000 50.00000000 50.00000000  0.33333333  0.33333333  0.33333333
2       <leaf>  50  50   0    1       0.01        0          0  1.00000000 50.00000000  0.00000000  0.00000000  1.00000000  0.00000000  0.00000000
3  Petal.Width 100 100  50    2       0.44        3          3  2.00000000  0.00000000 50.00000000 50.00000000  0.00000000  0.50000000  0.50000000
6       <leaf>  54  54   5    2       0.00        0          0  2.00000000  0.00000000 49.00000000  5.00000000  0.00000000  0.90740741  0.09259259
7       <leaf>  46  46   1    3       0.01        0          0  3.00000000  0.00000000  1.00000000 45.00000000  0.00000000  0.02173913  0.97826087

Aber nur die als gekennzeichneten<leaf> in demvar Spalte sind Endknoten (Blätter). In diesem Fall sind die Knoten 2, 6 und 7.

Wie oben erwähnt, können Sie diepath.rpart Methode zum Extrahieren einer Regel (diese Technik wird in derrattle Paket und im ArtikelSharma-Kredit-Score, wie folgt:

Darüber hinaus behält das Modell die Werte des vorhergesagten Werts bei

predicted.levels <- attr(model, "ylevels")

Dieser Wert entspricht der Spalteyval in demmodel$frame Datensatz.

Für das Blatt mit der Knotennummer 7 (Zeilennummer 5) ist der vorhergesagte Wert

> ylevels[model$frame[5, ]$yval]
[1] "virginica"

und die Regel ist

> rule <- path.rpart(model, nodes = 7)

 node number: 7 
   root
   Petal.Length>=2.45
   Petal.Width>=1.75

So könnte die Regel als gelesen werden

If Petal.Length >= 2.45 AND Petal.Width >= 1.75 THEN Species = Virginica

Ich weiß, dass ich testen kann (in einem Testdatensatz verwende ich den Irisdatensatz erneut), wie viele echte Positive ich für diese Regel habe, wobei der neue Datensatz wie folgt untergeordnet wird

> hits <- subset(iris, Petal.Length >= 2.45 & Petal.Width >= 1.75)

und dann Berechnen der Verwirrungsmatrix

> table(hits$Species, hits$Species == "virginica")

             FALSE TRUE
  setosa         0    0
  versicolor     1    0
  virginica      0   45

(Hinweis: Ich habe den gleichen Iris-Datensatz zum Testen verwendet.)

Wie kann ich die Regel programmatisch auswerten? Ich könnte die Bedingungen wie folgt aus der Regel extrahieren

> unlist(rule, use.names = FALSE)[-1]
[1] "Petal.Length>=2.45" "Petal.Width>=1.75" 

Aber wie kann ich von hier aus weitermachen? Ich kann das nicht benutzensubset Funktion

Danke im Voraus

HINWEIS: Diese Frage wurde zur besseren Übersichtlichkeit stark überarbeitet

Antworten auf die Frage(3)

Ihre Antwort auf die Frage