So führen sie das bagging in r durch (schritt für schritt)
Wenn wir einen Entscheidungsbaum für einen bestimmten Datensatz erstellen, verwenden wir nur einen einzigen Trainingsdatensatz, um das Modell zu erstellen.
Der Nachteil bei der Verwendung eines einzelnen Entscheidungsbaums besteht jedoch darin, dass er tendenziell unter einer hohen Varianz leidet. Das heißt, wenn wir den Datensatz in zwei Hälften aufteilen und den Entscheidungsbaum auf beide Hälften anwenden, könnten die Ergebnisse sehr unterschiedlich ausfallen.
Eine Methode, mit der wir die Varianz eines einzelnen Entscheidungsbaums reduzieren können, ist das sogenannte Bagging , manchmal auch Bootstrap-Aggregation genannt.
Das Absacken funktioniert wie folgt:
1. Nehmen Sie b Bootstrapping-Beispiele aus dem Originaldatensatz.
2. Erstellen Sie einen Entscheidungsbaum für jedes Bootstrap-Beispiel.
3. Mitteln Sie die Vorhersagen jedes Baums, um ein endgültiges Modell zu erhalten.
Indem wir Hunderte oder sogar Tausende einzelner Entscheidungsbäume erstellen und die durchschnittlichen Vorhersagen aller Bäume heranziehen, erhalten wir häufig ein angepasstes Taschenmodell, das im Vergleich zu einem einzelnen Entscheidungsbaum eine viel geringere Testfehlerrate erzeugt.
Dieses Tutorial bietet ein schrittweises Beispiel für die Erstellung eines Bagged-Modells in R.
Schritt 1: Laden Sie die erforderlichen Pakete
Zuerst laden wir die notwendigen Pakete für dieses Beispiel:
library (dplyr) #for data wrangling library (e1071) #for calculating variable importance library (caret) #for general model fitting library (rpart) #for fitting decision trees library (ipred) #for fitting bagged decision trees
Schritt 2: Montieren Sie das verpackte Modell
Für dieses Beispiel verwenden wir einen integrierten R-Datensatz namens „Air Quality“ , der Messungen der Luftqualität in New York City über 153 einzelne Tage enthält.
#view structure of air quality dataset
str(airquality)
'data.frame': 153 obs. of 6 variables:
$ Ozone: int 41 36 12 18 NA 28 23 19 8 NA ...
$Solar.R: int 190 118 149 313 NA NA 299 99 19 194 ...
$ Wind: num 7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
$ Temp: int 67 72 74 62 56 66 65 59 61 69 ...
$Month: int 5 5 5 5 5 5 5 5 5 5 ...
$Day: int 1 2 3 4 5 6 7 8 9 10 ...
Der folgende Code zeigt, wie man ein verpacktes Modell in R mithilfe der Funktion bagging() aus der ipred- Bibliothek einpasst.
#make this example reproducible set.seed(1) #fit the bagged model bag <- bagging( formula = Ozone ~ ., data = airquality, nbagg = 150 , coob = TRUE , control = rpart. control (minsplit = 2 , cp = 0 ) ) #display fitted bagged model bag Bagging regression trees with 150 bootstrap replications Call: bagging.data.frame(formula = Ozone ~ ., data = airquality, nbagg = 150, coob = TRUE, control = rpart.control(minsplit = 2, cp = 0)) Out-of-bag estimate of root mean squared error: 17.4973
Beachten Sie, dass wir uns für die Verwendung von 150 Bootstrapping-Beispielen entschieden haben, um das verpackte Modell zu erstellen, und dass wir angegeben haben, dass coob TRUE ist, um den geschätzten Out-of-Bag-Fehler zu erhalten.
Wir haben auch die folgenden Spezifikationen in der Funktion rpart.control() verwendet:
- minsplit = 2: Dies weist das Modell an, zum Teilen nur zwei Beobachtungen in einem Knoten zu benötigen.
- cp = 0 . Dies ist der Komplexitätsparameter. Wenn wir den Wert auf 0 setzen, ist nicht erforderlich, dass das Modell die Gesamtanpassung in irgendeiner Weise verbessern kann, um eine Aufteilung durchzuführen.
Im Wesentlichen ermöglichen diese beiden Argumente, dass einzelne Bäume extrem tief wachsen, was zu Bäumen mit hoher Varianz, aber geringer Verzerrung führt. Wenn wir dann das Bagging anwenden, können wir die Varianz des endgültigen Modells reduzieren und gleichzeitig die Verzerrung niedrig halten.
Aus den Modellergebnissen können wir ersehen, dass der geschätzte Out-of-Bag-RMSE 17,4973 beträgt. Dies ist die durchschnittliche Differenz zwischen dem vorhergesagten Wert für Ozon und dem tatsächlich beobachteten Wert.
Schritt 3: Visualisieren Sie die Bedeutung der Prädiktoren
Obwohl Bagged-Modelle tendenziell genauere Vorhersagen liefern als einzelne Entscheidungsbäume, ist es schwierig, die Ergebnisse angepasster Bagged-Modelle zu interpretieren und zu visualisieren.
Wir können jedoch die Bedeutung von Prädiktorvariablen veranschaulichen, indem wir die Gesamtreduzierung des RSS (Restsumme der Quadrate) aufgrund der Verteilung auf einem bestimmten Prädiktor berechnen, gemittelt über alle Bäume. Je größer der Wert, desto wichtiger ist der Prädiktor.
Der folgende Code zeigt, wie man mit der Funktion varImp() aus der Caret -Bibliothek ein Diagramm der variablen Wichtigkeit für das Fit-Bag-Modell erstellt:
#calculate variable importance VI <- data.frame(var= names (airquality[,-1]), imp= varImp (bag)) #sort variable importance descending VI_plot <- VI[ order (VI$Overall, decreasing= TRUE ),] #visualize variable importance with horizontal bar plot barplot(VI_plot$Overall, names.arg= rownames (VI_plot), horiz= TRUE , col=' steelblue ', xlab=' Variable Importance ')
Wir können sehen, dass Solar.R die wichtigste Prädiktorvariable im Modell ist, während Month die unwichtigste ist.
Schritt 4: Verwenden Sie das Modell, um Vorhersagen zu treffen
Schließlich können wir das Fitted-Bag-Modell verwenden, um Vorhersagen über neue Beobachtungen zu treffen.
#define new observation new <- data.frame(Solar.R=150, Wind=8, Temp=70, Month=5, Day=5) #use fitted bagged model to predict Ozone value of new observation predict(bag, newdata=new) 24.4866666666667
Basierend auf den Werten der Prädiktorvariablen sagt das Fitt-Bag-Modell voraus, dass der Ozonwert an diesem bestimmten Tag 24.487 betragen wird.
Den vollständigen R-Code, der in diesem Beispiel verwendet wird, finden Sie hier .