Zacznij terazZacznij za darmo

Dostrajanie liczby rund boostingu

Zacznijmy dostrajanie parametrów od sprawdzenia, jak liczba rund boostingu (czyli liczba budowanych drzew) wpływa na wydajność modelu XGBoost na danych spoza zbioru treningowego. Użyjesz xgb.cv() wewnątrz pętli for i zbudujesz jeden model dla każdej wartości parametru num_boost_round.

W tym ćwiczeniu kontynuujesz pracę ze zbiorem danych dotyczącym cen nieruchomości w Ames. Cechy są dostępne w tablicy X, a wektor docelowy – w zmiennej y.

To ćwiczenie jest częścią kursu

Extreme Gradient Boosting with XGBoost

Zobacz kurs

Instrukcje do ćwiczenia

  • Utwórz obiekt DMatrix o nazwie housing_dmatrix na podstawie X i y.
  • Utwórz słownik parametrów o nazwie params, przekazując odpowiednią wartość "objective" ("reg:squarederror") oraz "max_depth" (ustaw na 3).
  • Iteruj po num_rounds wewnątrz pętli for i przeprowadź 3-krotną walidację krzyżową. W każdej iteracji przekaż bieżącą liczbę rund boostingu (curr_num_rounds) do xgb.cv() jako argument num_boost_round.
  • Dodaj wartość RMSE z ostatniej rundy boostingu dla każdego modelu XGBoost walidowanego krzyżowo do listy final_rmse_per_round.
  • Wartości num_rounds i final_rmse_per_round zostały połączone i przekonwertowane do postaci DataFrame, dzięki czemu możesz łatwo zobaczyć, jak model radzi sobie przy każdej liczbie rund boostingu. Kliknij „Prześlij odpowiedź", aby zobaczyć wyniki!

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

# 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"]))
Edytuj i uruchom kod