Определите оптимальное количество деревьев для машины градиентного бустинга
В этом упражнении вы подготовитесь к построению модели градиентного бустинга для предсказания количества арендованных велосипедов в час в зависимости от погоды, типа и времени суток. Модель будет обучена на данных за июль.
Данные за июль уже загружены. Помните, что 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)