ПочатиПочніть безкоштовно

Налаштування кількості boosting-раундів

Почнімо з налаштування параметрів і подивімося, як кількість boosting-раундів (кількість дерев у моделі) впливає на якість 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-кратну крос-валідацію. У кожній ітерації циклу передавайте поточну кількість boosting-раундів (curr_num_rounds) до xgb.cv() як аргумент num_boost_round.
  • Додайте фінальне значення RMSE останнього boosting-раунду для кожної крос-валідаційної моделі XGBoost до списку final_rmse_per_round.
  • num_rounds і final_rmse_per_round вже об'єднано через zip і перетворено на DataFrame, щоб ви могли легко побачити, як модель працює з кожним boosting-раундом. Натисніть "Submit Answer", щоб переглянути результати!

Інтерактивна практична вправа

Спробуйте виконати цю вправу, доповнивши цей зразок коду.

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