machine-learning Лекция

Ансамбли II. Градиентный Бустинг (Gradient Boosting)

Лекция 12: Ансамбли II. Градиентный Бустинг (Gradient Boosting)

Цели лекции

  1. Понять фундаментальную разницу между Bagging (Random Forest) и Boosting.
  2. Разобраться, как можно обучаться на собственных ошибках (идея градиента).
  3. Сделать обзор “Большой тройки” библиотек: XGBoost, LightGBM, CatBoost.
  4. Освоить критически важные гиперпараметры: Learning Rate и Early Stopping.

Часть 1: Философия Бустинга. Последовательность против Параллелизма

1.1. Bagging vs Boosting

1.2. Аналогия: Студент и Экзамен

Как учатся ансамбли

  • Random Forest: 100 студентов решают тест независимо. Мы берем ответ большинства.
  • Boosting: Студент решает тест. Учитель проверяет и помечает ошибки. Студент учит только те темы, где ошибся. Снова сдает. Учитель снова помечает оставшиеся ошибки. Через 100 итераций студент становится гением (или зазубривает материал — риск переобучения).

Часть 2: Механика Градиентного Бустинга

Как математически “исправить ошибку”?

2.1. Обучение на остатках (Residuals)

Пусть мы предсказываем Цену квартиры (yy).

  1. Шаг 0: Модель F0(x)F_0(x) предсказывает среднюю цену: 5 млн.
  2. Оценка: Реальная цена первой квартиры 7 млн. Ошибка (остаток) = +2+2 млн.
  3. Шаг 1: Мы строим Дерево №1 (h1h_1), которое учится предсказывать не цену (7 млн), а ошибку (+2 млн).
    • Пусть Дерево №1 предсказало +1.8 млн.
  4. Обновление: Новая модель F1(x)=F0(x)+h1(x)=5+1.8=6.8F_1(x) = F_0(x) + h_1(x) = 5 + 1.8 = 6.8 млн.
  5. Шаг 2: Новая ошибка = 76.8=+0.27 - 6.8 = +0.2 млн. Строим Дерево №2, чтобы предсказать 0.2.

Суть: Каждое следующее дерево — это “заплатка”, закрывающая дыры предыдущих моделей.

2.2. Почему “Градиентный”?

Если функция потерь — MSE (квадратичная), то её производная (градиент) — это как раз разница (yy^)(y - \hat{y}). Предсказывая остатки (ошибки), мы фактически движемся в сторону анти-градиента функции потерь. Мы спускаемся с горы ошибок к минимуму.


Часть 3: “Большая Тройка” библиотек

В Python стандартный sklearn.ensemble.GradientBoostingClassifier используется редко (он медленный). Индустрия использует три оптимизированные библиотеки.


Часть 4: Гиперпараметры Бустинга

У бустинга десятки настроек, но важных всего 3-4.

4.1. Learning Rate (Скорость обучения, η\eta)

Это коэффициент, с которым мы добавляем новое дерево: Fnew=Fold+ηTreenewF_{new} = F_{old} + \eta \cdot Tree_{new}

  • Обычно η\eta маленькая (0.01 - 0.1).
  • Смысл: Мы не доверяем новому дереву на 100%, а берем от него лишь малую часть совета. Это делает обучение плавным и устойчивым.
  • Trade-off: Чем меньше Learning Rate, тем больше деревьев (n_estimators) нужно построить.

4.2. Number of Estimators (Количество деревьев)

Риск переобучения

В отличие от Random Forest, в Бустинге можно переобучиться, если деревьев слишком много. Модель начнет учить шум в остатках.

4.3. Early Stopping (Ранняя остановка)

Как узнать, сколько деревьев нужно? 100? 1000? Мы не гадаем.

  1. Откладываем валидационную выборку.
  2. После добавления каждого дерева проверяем ошибку на валидации.
  3. Если ошибка не падает (или растет) в течение NN раундов (patience) — стоп машина. Обучение прекращается.

Часть 5: Когда использовать Бустинг?

  • Табличные данные: Бустинг — король. Нейросети пока не могут его победить на задачах типа “Скоринг”, “Продажи”, “Рекомендации”.
  • Неструктурированные данные (Картинки, Звук, Текст): Бустинг слаб. Здесь правят Нейросети (Deep Learning).

🧠 Проверка знаний

В чем заключается фундаментальная архитектурная разница между ансамблями Bagging (например, Random Forest) и Boosting?

Какой механизм позволяет алгоритму Градиентного Бустинга автоматически находить оптимальное количество деревьев и избегать переобучения?