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 ')

Variabler Wichtigkeitsgraph in R

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 .

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert