ComeçarComece de graça

Ajustando o número de rounds de boosting

Vamos começar o ajuste de parâmetros observando como o número de rounds de boosting (número de árvores construídas) impacta o desempenho fora da amostra do seu modelo XGBoost. Você usará xgb.cv() dentro de um for e vai construir um modelo por valor do parâmetro num_boost_round.

Aqui, você continuará trabalhando com o conjunto de dados de habitação de Ames. As variáveis estão no array X, e o vetor alvo está em y.

Este exercício faz parte do curso

Extreme Gradient Boosting com XGBoost

Ver curso

Instruções do exercício

  • Crie um DMatrix chamado housing_dmatrix a partir de X e y.
  • Crie um dicionário de parâmetros chamado params, passando o "objective" apropriado ("reg:squarederror") e "max_depth" (defina como 3).
  • Itere sobre num_rounds em um laço for e realize validação cruzada com 3 folds. Em cada iteração do laço, passe o número atual de rounds de boosting (curr_num_rounds) para xgb.cv() como argumento de num_boost_round.
  • Acrescente o RMSE do round final de boosting para cada modelo XGBoost com validação cruzada à lista final_rmse_per_round.
  • num_rounds e final_rmse_per_round foram combinados com zip e convertidos em um DataFrame para que você veja facilmente como o modelo se sai em cada round de boosting. Clique em "Enviar Resposta" para ver os resultados!

Exercício interativo prático

Experimente este exercício completando este código de exemplo.

# 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 e executar o código