2015-01-09 2 views
6

In dem R-Paket rpart gegeben, was die Größe der Bäume bestimmt für einen Entscheidungsbaum in der CP Tabelle dargestellt? Im folgenden Beispiel zeigt die CP-Tabelle standardmäßig nur Bäume mit 1, 2 und 5 Knoten an (als nsplit = 0, 1 bzw. 4).Baum Größen von CP Tabelle in rpart

library(rpart) 
fit <- rpart(Kyphosis ~ Age + Number + Start, method="class", data=kyphosis) 
> printcp(fit) 

Classification tree: 
rpart(formula = Kyphosis ~ Age + Number + Start, data = kyphosis, 
method = "class") 

Variables actually used in tree construction: 
[1] Age Start 

Root node error: 17/81 = 0.20988 

n= 81 

     CP nsplit rel error xerror xstd 
1 0.176471  0 1.00000 1.00000 0.21559 
2 0.019608  1 0.82353 0.94118 0.21078 
3 0.010000  4 0.76471 0.94118 0.21078 

Gibt es eine rpart() inhärente Regel verwendet, um zu bestimmen, welche Größe der Bäume zu präsentieren? Und ist es möglich, printcp() zu zwingen, Kreuzvalidierungsstatistiken für alle möglichen Baumgrößen zurückzugeben, d.h. für das obige Beispiel auch Zeilen für Bäume mit 3 und 4 Knoten (nsplit = 2, 3)?

Antwort

3

Die Funktion rpart() wird mit der Funktion rpart.control() gesteuert. Es hat Parameter wie , die die Funktion teilt nur teilen, wenn es mehr Beobachtungen gibt als der angegebene Wert und cp, die die Funktion teilt nur teilt, wenn die insgesamt fehlende Anpassung um einen Faktor von cp verringert wird. Wenn Sie auf Ihrem obigen Beispiel summary(fit) ansehen, zeigt es die Statistik für alle Werte von nsplit. Um diese Werte zu drucken, wenn Sie printcp(fit) verwenden, müssen Sie die entsprechenden Werte von cp und auswählen, wenn Sie die ursprüngliche rpart-Funktion aufrufen.

+0

Vielen Dank für Ihre Antwort, aber ich hatte den Eindruck, dass 'minsplit' und' cp' sind in wachsenden den Baum vor dem Kreuzvalidierung wird versucht Parameter verwendet - anstatt es danach beschneiden, was was ist mein Frage und die CP-Tabelle beziehen sich auf. Wenn ich falsch verstanden habe, könnten Sie in der Lage sein, zu raten, warum die obige Ausgabe nur nsplit = 0, 1, 4 darstellt und welche geeigneten Werte von "minsplit" und "cp" nsplit = 0, 1, 2, 3 darstellen könnten. 4? übrigens 'Zusammenfassung (fit)' hat mir keine Kreuzvalidierung Statistiken für alle Werte von nsplit - der CP Tabelle zeigte die gleiche ist wie die Frage. – alopex

1

Die cran-r-Dokumentation zu rpart erwähnt das Hinzufügen der Option cp = 0 zur rpart-Funktion. http://cran.r-project.org/web/packages/rpart/vignettes/longintro.pdf Es werden auch andere Optionen erwähnt, die in der Funktion rpart angegeben werden können, um zB die Anzahl der Splits zu steuern.

dfit <- rpart(y ~ x, method='class', 
      control = rpart.control(xval = 10, minbucket = 2, **cp = 0**)) 
+1

Vielen Dank für Ihre Antwort, aber wie oben, glaube ich, "Minbucket" und "cp" beeinflussen nur das Wachstum des Baumes, nicht die Kreuzvalidierung, die danach kommt. In diesem Fall hat das Hinzufügen von 'control = rpart.control (cp = 0)' die in der Frage dargestellte CP-Tabelle nicht geändert. – alopex

+0

Ich weiß nicht, wie Sie mehr Optionen erzwingen können, um alle Splits anzuzeigen. Wenn es bei der Aufteilung keinen zusätzlichen Gewinn gibt, denke ich nicht, dass rpart es in die Ausgabe aufnehmen wird. Auch die Kyphose ist ein kleiner Datensatz mit nur 81 Obs. Wenn Sie den CP-Plot mit den folgenden Optionen sehen, gibt es im X Relative Error zwischen 1 und 3 keine große Chance und daher wird nsplit = 2 nicht als Ganzes betrachtet. fit2 <- rpart (Kyphose ~ Alter + Anzahl + Start, Daten = Kyphose, method = "Klasse", Kontrolle = rpart.control (minsplit = 8)) rsq.rpart (fit2) –

Verwandte Themen