Kom igångKom igång gratis

Justera antalet boosting-rundor

Vi börjar parameterinställningen med att undersöka hur antalet boosting-rundor (det vill säga antalet träd som byggs) påverkar din XGBoost-modells prestanda på osedd data. Du använder xgb.cv() inuti en for-slinga och bygger en modell per värde på parametern num_boost_round.

Här fortsätter du att arbeta med Ames-bostadsdatasetet. Särdragen finns tillgängliga i arrayen X och målvektorn finns i y.

Den här övningen är en del av kursen

Extreme Gradient Boosting med XGBoost

Visa kurs

Övningsinstruktioner

  • Skapa en DMatrix med namnet housing_dmatrix från X och y.
  • Skapa en parameterdictionary med namnet params och ange lämpliga värden för "objective" ("reg:squarederror") och "max_depth" (sätt det till 3).
  • Iterera över num_rounds i en for-slinga och utför 3-faldig korsvalidering. I varje iteration av slingan skickar du in det aktuella antalet boosting-rundor (curr_num_rounds) till xgb.cv() som argument till num_boost_round.
  • Lägg till RMSE för den sista boosting-rundan för varje korsvaliderad XGBoost-modell i listan final_rmse_per_round.
  • num_rounds och final_rmse_per_round har slagits ihop och konverterats till en DataFrame så att du enkelt kan se hur modellen presterar för varje boosting-runda. Klicka på Skicka in svar för att se resultaten!

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

# 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"]))
Redigera och kör kod