LoslegenKostenlos loslegen

Feinabstimmung der Anzahl der Boosting-Runden

Lass uns mit dem Tuning beginnen und untersuchen, wie sich die Anzahl der Boosting-Runden (Anzahl der gebauten Bäume) auf die Out-of-Sample-Performance deines XGBoost-Modells auswirkt. Du wirst xgb.cv() in einer for-Schleife verwenden und pro num_boost_round-Parameter ein Modell bauen.

Hier arbeitest du weiter mit dem Ames-Housing-Datensatz. Die Features liegen im Array X vor, und der Zielvektor befindet sich in y.

Diese Übung ist Teil des Kurses

Extreme Gradient Boosting mit XGBoost

Kurs anzeigen

Anleitung zur Übung

  • Erstelle eine DMatrix namens housing_dmatrix aus X und y.
  • Erstelle ein Parameter-Dictionary namens params und übergib die passenden Werte für "objective" ("reg:squarederror") und "max_depth" (setze es auf 3).
  • Iteriere über num_rounds in einer for-Schleife und führe eine 3-fache Kreuzvalidierung durch. Übergib in jeder Iteration die aktuelle Anzahl der Boosting-Runden (curr_num_rounds) an xgb.cv() als Argument für num_boost_round.
  • Hänge die RMSE der letzten Boosting-Runde für jedes kreuzvalidierte XGBoost-Modell an die Liste final_rmse_per_round an.
  • num_rounds und final_rmse_per_round wurden bereits gepairt (zip) und in ein DataFrame konvertiert, sodass du leicht sehen kannst, wie das Modell mit jeder Boosting-Runde abschneidet. Klicke auf "Antwort senden", um die Ergebnisse zu sehen!

Interaktive Übung

Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.

# Create the DMatrix: housing_dmatrix
housing_dmatrix = ____

# Create the parameter dictionary for each tree: params 
params = {"____":"____", "____":____}

# Create list of number of boosting rounds
num_rounds = [5, 10, 15]

# Empty list to store final round rmse per XGBoost model
final_rmse_per_round = []

# Iterate over num_rounds and build one model per num_boost_round parameter
for curr_num_rounds in num_rounds:

    # Perform cross-validation: cv_results
    cv_results = ____(dtrain=____, params=____, nfold=3, num_boost_round=____, metrics="rmse", as_pandas=True, seed=123)
    
    # Append final round RMSE
    ____.____(cv_results["test-rmse-mean"].tail().values[-1])

# Print the resultant DataFrame
num_rounds_rmses = list(zip(num_rounds, final_rmse_per_round))
print(pd.DataFrame(num_rounds_rmses,columns=["num_boosting_rounds","rmse"]))
Code bearbeiten und ausführen