Деревья с градиентным бустингом: построение модели
Градиентный бустинг — это метод повышения точности моделей. Идея состоит в следующем: сначала обучается простая и быстро вычисляемая слабая модель. Затем значения отклика заменяются остатками этой модели и обучается новая модель. «Сложив» исходную модель прогнозирования отклика и новую модель прогнозирования остатков, вы получаете более точную модель. Этот процесс можно повторять многократно: каждый раз строится новая модель для предсказания остатков предыдущей, а результаты суммируются. С каждой итерацией качество итоговой модели улучшается.
Для наглядности: sparklyr использует деревья с градиентным бустингом, то есть градиентный бустинг, в котором в роли слабой базовой модели выступают деревья решений. Такой подход применим как к задачам классификации (где переменная отклика является категориальной), так и к задачам регрессии (где она непрерывна). В случае регрессии, который вы и будете использовать, мерой качества подгонки точки служит остаток.
Деревья решений подробно рассматриваются в курсах Supervised Learning in R: Classification и Supervised Learning in R: Regression. Второй курс также охватывает тему градиентного бустинга.
Чтобы запустить модель деревьев с градиентным бустингом в sparklyr, вызовите функцию ml_gradient_boosted_trees(). Использование этой функции обсуждалось в первом упражнении данной главы.
Это упражнение является частью курса
Введение в Spark с sparklyr на R
Инструкции к упражнению
Подключение к Spark уже создано и доступно как spark_conn. Tibble, привязанный к объединённым и отфильтрованным метаданным треков и данным о тембре, хранящимся в Spark, предопределён как track_data_to_model_tbl.
- Получите названия столбцов, содержащих строку
"timbre", чтобы использовать их в качестве признаков.- С помощью
colnames()получите названия столбцовtrack_data_to_model_tbl. Обратите внимание: функцияnames()не даст нужного результата. - С помощью
str_subset()отфильтруйте нужные столбцы. - В качестве аргумента
patternпередайтеfixed("timbre"). - Сохраните результат в переменную
feature_colnames.
- С помощью
- Создайте
formulaдля модели с помощьюreformulate().- Аргумент
termlabels(входные переменные формулы) должен быть равенfeature_colnames. - Аргумент
response(выходная переменная формулы) должен быть равен"year". - Сохраните результат в переменную
year_formula. - Такой вызов
reformulate()объединяет все переменные изfeature_colnamesзнаком+, формируя правую частьformula. В итоге получается формула видаyear ~ timbre1 + timbre2 + ... + timbre12, которая описывает зависимости между переменными, включёнными в модель.
- Аргумент
- Запустите модель с градиентным бустингом.
- Вызовите
ml_gradient_boosted_trees(), передав единственным аргументом созданную формулуyear_formula. - Сохраните результат в переменную
gradient_boosted_trees_model.
- Вызовите
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
# track_data_to_model_tbl has been pre-defined
track_data_to_model_tbl
feature_colnames <- track_data_to_model_tbl %>%
# Get the column names
___ %>%
# Limit to the timbre columns
___(___(___))
feature_colnames
# Create the formula for the model
year_formula <- ___
gradient_boosted_trees_model <- track_data_to_model_tbl %>%
# Run the gradient boosted trees model
___