ComenzarEmpieza gratis

Ajustar el número de rondas de boosting

Empecemos con el ajuste de parámetros viendo cómo el número de rondas de boosting (el número de árboles que construyes) afecta al rendimiento fuera de muestra de tu modelo XGBoost. Usarás xgb.cv() dentro de un bucle for y construirás un modelo por cada valor del parámetro num_boost_round.

Aquí seguirás trabajando con el conjunto de datos de viviendas de Ames. Las características están disponibles en el array X, y el vector objetivo está contenido en y.

Este ejercicio forma parte del curso

Extreme Gradient Boosting con XGBoost

Ver curso

Instrucciones del ejercicio

  • Crea un DMatrix llamado housing_dmatrix a partir de X y y.
  • Crea un diccionario de parámetros llamado params, pasando el "objective" apropiado ("reg:squarederror") y "max_depth" (ponlo en 3).
  • Itera sobre num_rounds dentro de un bucle for y realiza una validación cruzada de 3 particiones. En cada iteración del bucle, pasa el número actual de rondas de boosting (curr_num_rounds) a xgb.cv() como argumento de num_boost_round.
  • Añade el RMSE de la última ronda de boosting de cada modelo XGBoost validado cruzadamente a la lista final_rmse_per_round.
  • num_rounds y final_rmse_per_round se han combinado con zip y convertido en un DataFrame para que puedas ver fácilmente cómo rinde el modelo con cada ronda de boosting. Pulsa "Enviar respuesta" para ver los resultados.

Ejercicio interactivo práctico

Prueba este ejercicio y completa el código de muestra.

# 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"]))
Editar y ejecutar código