Direkt zum Inhalt
Urkunden
Datenmanagement in RDateneingabe in RGraphen in RR DokumentationR SchnittstelleStatistik in R

Baum-basierte Modelle in R

Die rekursive Partitionierung ist ein grundlegendes Werkzeug im Data Mining. Er hilft uns, die Struktur eines Datensatzes zu erforschen und gleichzeitig einfach zu visualisierende Entscheidungsregeln für die Vorhersage eines kategorischen (Klassifikationsbaum) oder kontinuierlichen (Regressionsbaum) Ergebnisses zu entwickeln. Dieser Abschnitt beschreibt kurz die CART-Modellierung, bedingte Inferenzbäume und Zufallswälder.

CART-Modellierung über rpart

Klassifizierungs- und Regressionsbäume (wie von Brieman, Freidman, Olshen und Stone beschrieben) können mit dem Paket rpart erstellt werden. Ausführliche Informationen zu rpart findest du in An Introduction to Recursive Partitioning Using the RPART Routines</a >. Im Folgenden findest du die allgemeinen Schritte, gefolgt von zwei Beispielen.

1. Den Baum wachsen lassen

Um einen Baum wachsen zu lassen,userpart(formula, data=, method=,control=) wo

   
formula hat das FormatErgebnis ~ Prädiktor1+Prädiktor2+Prädiktor3+Effekt.
data= gibt den Datenrahmen an
method= "Klasse" für einen Klassifikationsbaum"anova"</strong > für einen Regressionsbaum
control= optionale Parameter zur Steuerung des Baumwachstums. Zum Beispiel verlangt control=rpart.control(minsplit=30, cp=0.001), dass die Mindestanzahl der Beobachtungen in einem Knoten 30 beträgt, bevor ein Split versucht wird, und dass ein Split die Gesamtunzulänglichkeit um den Faktor 0.001 (Kostenkomplexitätsfaktor) verringern muss, bevor er versucht wird.

2. Untersuche die Ergebnisse

Die folgenden Funktionen helfen uns, die Ergebnisse zu untersuchen.

   
printcp(fit) cp-Tabelle anzeigen
plotcp(fit) Kreuzvalidierungsergebnisse darstellen
rsq.rpart(fit) Stelle das ungefähre R-Quadrat und den relativen Fehler für verschiedene Splits dar (2 Plots). Die Beschriftungen sind nur für die "Anova"-Methode geeignet.
drucken(fit) Druckergebnisse
Zusammenfassung(fit) Detaillierte Ergebnisse einschließlich Surrogat-Splits
plot(fit) Entscheidungsbaum erstellen
text(fit) beschrifte den Entscheidungsbaumplot
post(fit, file=) Postscript-Diagramm des Entscheidungsbaums erstellen

In Bäumen, die mit rpart( ) erstellt wurden, wird zum LINKEN Zweig gewechselt, wenn die angegebene Bedingung erfüllt ist (siehe die Grafiken unten).

3. Baum beschneiden

Schneide den Baum zurück, um eine Überanpassung der Daten zu vermeiden. Normalerweise solltest du eine Baumgröße wählen, die den kreuzvalidierten Fehler minimiert, also die xerror-Spalte, die von printcp( ) ausgegeben wird.

Beschneide den Baum auf die gewünschte Größe mitprune(fit, cp= )

Verwende printcp( ), um die kreuzvalidierten Fehlerergebnisse zu untersuchen, wähle den Komplexitätsparameter aus, der mit dem geringsten Fehler verbunden ist, und gib ihn in die Funktion prune( ) ein. Alternativ kannst du das folgende Codefragment verwenden

     fit$cptable[which.min(fit$cptable[, "xerror"]), "CP"]</strong >

um automatisch den Komplexitätsparameter auszuwählen, der den kleinsten kreuzvalidierten Fehler aufweist. Danke an HSAUR für diese Idee.

Beispiel für einen Klassifikationsbaum

Verwenden wir den Datenrahmen Kyphose, um eine Art der Verformung (Kyphose) nach einer Operation vorherzusagen, und zwar anhand des Alters in Monaten (Alter), der Anzahl der betroffenen Wirbel (Anzahl) und des höchsten operierten Wirbels (Start).

# Classification Tree with rpart
library(rpart)

# grow tree
fit <- rpart(Kyphosis ~ Age + Number + Start,
   method="class", data=kyphosis)

printcp(fit) # display the results
plotcp(fit) # visualize cross-validation results
summary(fit) # detailed summary of splits

# plot tree
plot(fit, uniform=TRUE,
   main="Classification Tree for Kyphosis")
text(fit, use.n=TRUE, all=TRUE, cex=.8)

# create attractive postscript plot of tree
post(fit, file = "c:/tree.ps",
   title = "Classification Tree for Kyphosis")

cp Plot Klassifizierungsbaum Klassifizierungsbaum in Postscript

# prune the tree
pfit<- prune(fit, cp=   
  fit$cptable[which.min(fit$cptable[,"xerror"]),"CP"])

# plot the pruned tree
plot(pfit, uniform=TRUE,
   main="Pruned Classification Tree for Kyphosis")
text(pfit, use.n=TRUE, all=TRUE, cex=.8)
post(pfit, file = "c:/ptree.ps",
   title = "Pruned Classification Tree for Kyphosis")

Beschnittener Klassifizierungsbaum Beschnittener Klassifizierungsbaum in Postscript

Beispiel für einen Regressionsbaum

In diesem Beispiel werden wir den Kilometerstand eines Autos anhand des Preises, des Landes, der Zuverlässigkeit und des Fahrzeugtyps vorhersagen. Der Datenrahmen ist cu.summary.

# Regression Tree Example
library(rpart)

# grow tree
fit <- rpart(Mileage~Price + Country + Reliability + Type,
   method="anova", data=cu.summary)

printcp(fit) # display the results
plotcp(fit) # visualize cross-validation results
summary(fit) # detailed summary of splits

# create additional plots
par(mfrow=c(1,2)) # two plots on one page
rsq.rpart(fit) # visualize cross-validation results

# plot tree
plot(fit, uniform=TRUE,
   main="Regression Tree for Mileage ")
text(fit, use.n=TRUE, all=TRUE, cex=.8)

# create attractive postcript plot of tree
post(fit, file = "c:/tree2.ps",
   title = "Regression Tree for Mileage ")

cp-Plot für Regressionsbaum rsquare-Plot für Regressionsbaum Regressionsbaum

# prune the tree
pfit<- prune(fit, cp=0.01160389) # from cptable   

# plot the pruned tree
plot(pfit, uniform=TRUE,
   main="Pruned Regression Tree for Mileage")
text(pfit, use.n=TRUE, all=TRUE, cex=.8)
post(pfit, file = "c:/ptree2.ps",
   title = "Pruned Regression Tree for Mileage")

Es stellt sich heraus, dass dies denselben Baum ergibt wie das Original.

Bedingte Inferenzbäume über die Partei

Das Party-Paket bietet nichtparametrische Regressionsbäume für nominale, ordinale, numerische, zensierte und multivariate Antworten. party: Ein Labor für rekursive Partitionierung</a >, liefert Details.

Du kannst einen Regressions- oder Klassifikationsbaum über die Funktion

ctree(formula, data=)Die Art des erstellten Baums hängt von der Ergebnisvariable ab (nominaler Faktor, geordneter Faktor, numerisch, etc.). Das Wachstum der Bäume basiert auf statistischen Stoppregeln, sodass ein Beschneiden nicht erforderlich sein sollte.

Die beiden vorherigen Beispiele werden im Folgenden erneut analysiert.

# Conditional Inference Tree for Kyphosis
library(party)
fit <- ctree(Kyphosis ~ Age + Number + Start,
   data=kyphosis)
plot(fit, main="Conditional Inference Tree for Kyphosis")

Konventioneller Inferenzbaum für Kyphose

# Conditional Inference Tree for Mileage
library(party)
fit2 <- ctree(Mileage~Price + Country + Reliability + Type,
   data=na.omit(cu.summary))

Bedingter Inferenzbaum für Kilometerstand

Zufallsforsten

Zufallswälder verbessern die Vorhersagegenauigkeit, indem sie eine große Anzahl von Bootstrap-Bäumen (basierend auf Zufallsstichproben von Variablen) erzeugen, einen Fall mit jedem Baum in diesem neuen "Wald" klassifizieren und ein endgültiges Vorhersageergebnis durch die Kombination der Ergebnisse aller Bäume bestimmen (ein Durchschnitt bei der Regression, ein Mehrheitsvotum bei der Klassifizierung). Der Random-Forest-Ansatz von Breiman und Cutler wird mit dem Paket randomForest</a> umgesetzt.

Hier ist ein Beispiel.

# Random Forest prediction of Kyphosis data
library(randomForest)
fit <- randomForest(Kyphosis ~ Age + Number + Start,   data=kyphosis)
print(fit) # view results
importance(fit) # importance of each predictor

Weitere Informationen findest du auf der umfassenden Random Forest Website</a > .

Weiter gehen

In diesem Abschnitt wurden die verfügbaren Optionen nur angerissen. Weitere Informationen findest du in der CRAN Task View on Machine & Statistical Learning</a > .

Zum Üben

Probiere den Kurs Überwachtes Lernen in R</a > aus, der eine Übung mit Random Forests enthält .

R Grundlagen lernen

Beherrsche die Grundlagen der Datenanalyse in R, einschließlich Vektoren, Listen und Datenrahmen, und übe R mit echten Datensätzen.
Beginne R kostenlos zu lernen