НачатьНачать бесплатно

Настройка количества раундов бустинга

Начнём настройку параметров с изучения того, как количество раундов бустинга (то есть количество построенных деревьев) влияет на качество модели XGBoost на отложенных данных. Вы будете использовать xgb.cv() внутри цикла for и строить по одной модели для каждого значения параметра num_boost_round.

В этом упражнении вы продолжите работу с набором данных о жилье Ames. Признаки хранятся в массиве X, а целевой вектор — в y.

Это упражнение является частью курса

Экстремальный градиентный бустинг с XGBoost

Посмотреть курс

Инструкции к упражнению

  • Создайте объект DMatrix с именем housing_dmatrix из X и y.
  • Создайте словарь параметров params, передав соответствующие значения "objective" ("reg:squarederror") и "max_depth" (установите равным 3).
  • Выполните итерацию по num_rounds в цикле for и проведите 3-кратную кросс-валидацию. На каждой итерации передавайте текущее количество раундов бустинга (curr_num_rounds) в xgb.cv() в качестве аргумента num_boost_round.
  • Добавляйте значение RMSE последнего раунда бустинга для каждой кросс-валидированной модели XGBoost в список final_rmse_per_round.
  • Значения num_rounds и final_rmse_per_round объединены с помощью zip и преобразованы в DataFrame, чтобы вы могли удобно оценить качество модели при каждом количестве раундов. Нажмите «Отправить ответ», чтобы увидеть результаты!

Интерактивное практическое упражнение

Попробуйте выполнить это упражнение, дополнив этот пример кода.

# 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"]))
Редактировать и запускать код