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

Определите оптимальное количество деревьев для машины градиентного бустинга

В этом упражнении вы подготовитесь к построению модели градиентного бустинга для предсказания количества арендованных велосипедов в час в зависимости от погоды, типа и времени суток. Модель будет обучена на данных за июль.

Данные за июль уже загружены. Помните, что bikesJuly.treat больше не содержит столбца с целевой переменной, поэтому его нужно получить из необработанных данных: bikesJuly$cnt.

Для обучения модели вы будете использовать пакет xgboost. Функция xgb.cv() (docs) применяет кросс-валидацию для оценки ошибки на отложенной выборке по мере добавления каждого нового дерева в модель. Оптимальное количество деревьев для итоговой модели — это то, при котором RMSE на отложенной выборке минимальна.

Основные аргументы функции xgb.cv() в этом упражнении:

  • data: числовая матрица.
  • label: вектор целевых значений (также числовой).
  • nrounds: максимальное число итераций (деревьев).
  • nfold: количество фолдов для кросс-валидации. Хорошим выбором будет 5.
  • objective: "reg:squarederror" для непрерывных целевых переменных.
  • eta: скорость обучения.
  • max_depth: максимальная глубина деревьев.
  • early_stopping_rounds: количество итераций без улучшения, после которых обучение прекращается.
  • verbose: FALSE, чтобы отключить вывод сообщений.

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

Обучение с учителем в R: регрессия

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

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

  • Заполните пропуски, чтобы запустить xgb.cv() на обработанных обучающих данных; сохраните результат в переменную cv.
    • Используйте as.matrix(), чтобы преобразовать обработанный фрейм данных в матрицу.
    • Задайте 50 итераций и 5-кратную кросс-валидацию.
    • Установите early_stopping_rounds равным 5.
    • Установите eta равным 0,75, а max_depth — 5.
  • Извлеките фрейм данных evaluation_log из cv и сохраните его в переменную elog. Каждая строка evaluation_log соответствует одному дополнительному дереву, поэтому номер строки указывает на количество деревьев в модели.
  • Заполните пропуски, чтобы найти количество деревьев, при котором значения столбцов train_rmse_mean и test_rmse_mean минимальны.
    • Функция which.min() (docs) возвращает индекс минимального элемента вектора.
    • Сколько деревьев вам потребуется?

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

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

# Run xgb.cv
cv <- xgb.cv(data = ____, 
            label = ___,
            nrounds = ___,
            nfold = ___,
            objective = "reg:squarederror",
            eta = ___,
            max_depth = ___,
            early_stopping_rounds = ___,
            verbose = FALSE   # silent
)

# Get the evaluation log 
elog <- ___

# Determine and print how many trees minimize training and test error
elog %>% 
   summarize(ntrees.train = ___,   # find the index of min(train_rmse_mean)
             ntrees.test  = ___)   # find the index of min(test_rmse_mean)
Редактировать и запускать код