Aan de slagGa gratis aan de slag

Het aantal boosting-rondes afstemmen

Laten we beginnen met het afstemmen van parameters door te kijken hoe het aantal boosting-rondes (het aantal bomen dat je bouwt) de out-of-sample-prestaties van je XGBoost-model beïnvloedt. Je gebruikt xgb.cv() binnen een for-lus en bouwt één model per waarde van de parameter num_boost_round.

Hier werk je verder met de Ames-housinggegevensset. De features staan in de array X, en de doelvector staat in y.

Deze oefening maakt deel uit van de cursus

Extreme Gradient Boosting met XGBoost

Cursus bekijken

Oefeninstructies

  • Maak een DMatrix met de naam housing_dmatrix op basis van X en y.
  • Maak een parameterdictionary params en geef de juiste "objective" ("reg:squarederror") en "max_depth" (stel in op 3) mee.
  • Itereer over num_rounds in een for-lus en voer 3-voudige cross-validatie uit. Geef in elke iteratie van de lus het huidige aantal boosting-rondes (curr_num_rounds) door aan xgb.cv() als argument voor num_boost_round.
  • Voeg de RMSE van de laatste boosting-ronde voor elk gevalideerd XGBoost-model toe aan de lijst final_rmse_per_round.
  • num_rounds en final_rmse_per_round zijn samengevoegd met zip en omgezet naar een DataFrame, zodat je makkelijk kunt zien hoe het model presteert bij elke boosting-ronde. Klik op 'Antwoord verzenden' om de resultaten te zien!

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in te vullen.

# 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 bewerken en uitvoeren