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

Если вы помните Вольтрона — вы понимаете Gradient Boosting. Команду странных механических львов, объединяющихся в огромного робота против зла, только вместо «зла» здесь неупорядоченные данные. Градиентный бустинг — это трюк в машинном обучении, где мы создаём сильную модель, объединяя множество посредственных. Как если бы вы собрали команду середнячков, которые по отдельности так себе, но вместе становятся Мстителями Предсказательной Силы — исправляют ошибки друг друга, как слишком заядлые отличники в классе.

Это в кратце, а вот детали:

Gradient Boosting так называется потому что алгоритм строит (бустит) новые модели из более мелких на основе градиента функции потерь.  

Бустинг (объединение) — это комбинация множества простых слабых моделей (обычно небольших деревьев решений), где каждая новая исправляет ошибки предыдущих. Каждая следующая модель пытается улучшить результат, фокусируясь на недочётах своих предшественников.  

Градиент — в математике градиент — это вектор, указывающий направление наибольшего роста функции.  В Gradient Boosting речь идёт о градиенте функции потерь (т.е. функции, измеряющей, насколько ошибочны предсказания предыдущего шага).  

Как это работает:

Сначала у нас есть начальная модель с некоторой ошибкой (потерей). Каждая новая модель предсказывает отрицательный градиент (направление наискорейшего спуска) этой ошибки, показывая, как изменить прогнозы, чтобы снизить ошибку. Двигаясь в этом направлении, алгоритм шаг за шагом приближается к оптимальному решению.  

Пример с домами:   

Исходные данные:  

57d04c504c772da213cdff6393a91259.png

Шаг 1: Средняя цена

Считаем среднее значение: (100 + 200 + 150) / 3 = 150. Изначально мы предсказываем для всех домов 150.  

Шаг 2: Считаем Остатки (ошибки)

Вычитаем предсказание из фактической цены:   

  • Дом 1: 100 — 150 = -50  

  • Дом 2: 200 — 150 = 50 

  • Дом 3: 150 — 150 = 0  

a8c1c590ce01bc7ef06bbcedb00526e0.png

Шаг 3: Дерево для предсказания ошибки

Группируем по локациям:   

  • Локация A (дома 1 и 3): средняя ошибка= (-50 + 0) / 2 = -25  

  • Локация B (дом 2): ошибка= 50  

829bc95be35d59a71da54bed4fc16ac7.png

Шаг 4: Корректируем прогнозы 

Допустим что скорость обучения (learning rate) = 0.1:   

  • Дом 1: 150 + 0.1 * (-25) = 147.5

  • Дом 2: 150 + 0.1×50 = 155  

  • Дом 3: 150 + 0.1 * (-25) = 147.5  

8ea6927a4375da865a517bb7950ad104.png

Шаг 5: Пересчитываем ошибки

Рассчитываем обновлённые ошибки:   

  • Дом 1: 100 — 147.5 = -47.5  

  • Дом 2: 200 — 155 = 45  

  • Дом 3: 150 — 147.5 = 2.5  

60040ad4a26a9c830b77d9c56c0cdf39.png

Далее мы могли бы повторять шаги, добавляя новые корректирующие слои, но для простоты остановимся здесь. Интересный факт в том что Gradient Boosting может работать с пропусками в данных без дополнительной предобработки, что крайне удобно для реальных грязных датасетов.

Gradient Boosting vs. Нейросети и другие методы

Gradient Boosting идеален для структурированных/табличных данных, требует меньше данных для высокой точности, проще в настройке.  

Нейросети же лучше справляются с неструктурированными данными (изображения, текст) и для их тренировки нужно больше ресурсов.

Почему выбирают Gradient Boosting?

  • Высокая точность, часто превосходит другие алгоритмы (логистическую регрессию, случайные леса, нейросети) на табличных данных.  

  • Работа с табличными данными. В отличие от нейросетей, алгоритм заточен на числовые и категориальные признаки.  

  • Встроенный выбор признаков — алгоритм сам оценивает важность переменных, упрощая интерпретацию модели.  

  • Улавливает сложные взаимосвязи автоматически, т.е. способен обнаруживать нелинейные зависимости без ручной генерации признаков.  

  • Устойчивость к оверфитингу — современные реализации (XGBoost, LightGBM, CatBoost) используют регуляризацию для эффективной борьбы с переобучением.  

  • Универсальность — эффективен для регрессии, классификации, ранжирования.  

  • Хорошая базовая производительность — часто работает «из коробки» лучше, чем нейросети.  

Современные библиотеки Gradient Boosting  

  • XGBoost (Extreme Gradient Boosting, автор — Tianqi Chen) — оптимизирован по скорости, точности и масштабируемости. Лидер на Kaggle.  

  • LightGBM — создан Microsoft Research, дает ускоренное обучение на больших данных через гистограммные алгоритмы и leaf-wise рост деревьев. Идеален для больших датасетов.

  • CatBoost — создан в Yandex: дает улучшенную обработка категориальных признаков и идеален для таких залач, собственно автоматически обрабатывает категориальные признаки так что это не нужно делать вручную.

Пишите ваши вопросы в комментариях.

На этом всё, удачи!  

© Habrahabr.ru