Как работает градиентный бустинг

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

🔹 Общая идея бустинга

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

В отличие от бэггинга (например, Random Forest), который обучает модели независимо и усредняет результат, бустинг — итеративный и последовательный.

🔹 Базовые понятия

  1. Слабый алгоритм — модель, дающая результат чуть лучше случайного. В градиентном бустинге чаще всего используется дерево решений с малой глубиной (обычно до 4–6).

  2. Остатки (residuals) — разница между фактическим значением и предсказанным значением. Именно на них учатся следующие модели.

  3. Функция потерь (loss function) — метрика, которую нужно минимизировать (например, MSE, Log-loss и др.).

  4. Градиент — производная функции потерь по предсказаниям модели. Именно он показывает направление наибольшего уменьшения ошибки.

  5. Темп обучения (learning rate) — масштабирует влияние каждой новой модели на итоговое предсказание. Обычно 0.01≤η≤0.30.01 \leq \eta \leq 0.3.

🔹 Математическая формулировка

Пусть:

  • XX — входные признаки;

  • yy — истинные значения;

  • Fm(X)F_m(X) — модель после mm-й итерации;

  • hm(X)h_m(X) — новая добавляемая модель (обычно дерево);

  • η\eta — темп обучения.

Итоговая модель строится как сумма:

FM(X)=m=1hm(X)F_M(X) = \\sum_{m=1}^{M} \\eta \\cdot h_m(X)

Каждая новая модель hm(X)h_m(X) обучается на градиенте функции потерь:

gi(m)=\[L(yi,F(Xi))F(Xi)\]F(X)=Fm1(X)g_i^{(m)} = \\left\[ \\frac{\\partial L(y_i, F(X_i))}{\\partial F(X_i)} \\right\]\_{F(X) = F_{m-1}(X)}

То есть мы обучаем hm(X)h_m(X) так, чтобы она аппроксимировала отрицательный градиент потерь по текущим предсказаниям.

🔹 Пошаговая схема работы градиентного бустинга

  1. Инициализация модели:
    Выбирается константное предсказание F0(X)F_0(X), минимизирующее функцию потерь.
    Например, в регрессии с MSE это среднее значение по yy.

  2. Для каждой итерации m = 1...M:

    • Вычисляются градиенты потерь gi(m)g_i^{(m)} для всех объектов.

    • Строится слабая модель hm(X)h_m(X), обученная на этих градиентах.

    • Обновляется итоговая модель:
      Fm(X)=Fm−1(X)+η⋅hm(X)F_m(X) = F_{m-1}(X) + \eta \cdot h_m(X)

    • Итоговое предсказание:
      Суммируются все предсказания от каждой слабой модели с учётом темпа обучения.

🔹 Пример: регрессия с MSE

Пусть функция потерь — среднеквадратичная ошибка (MSE):

L(y,F(X))=12(yF(X))2L(y, F(X)) = \\frac{1}{2}(y - F(X))^2

Градиент по F(X)F(X):

LF(X)=F(X)y\\frac{\\partial L}{\\partial F(X)} = F(X) - y

На каждой итерации обучаем дерево на остатках ri=yi−Fm−1(Xi)r_i = y_i - F_{m-1}(X_i), т.е. на ошибках предыдущей модели.

🔹 Градиентный бустинг для классификации

При задачах классификации (например, бинарная с метками 0 и 1), используют функцию потерь log-loss:

L(y,p)=\[ylog(p)+(1y)log(1p)\]L(y, p) = -\[y \\log(p) + (1 - y) \\log(1 - p)\]

Здесь модель предсказывает логарифмы шансов (logits), а затем применяется сигмоида для получения вероятностей:

p=11+eF(X)p = \\frac{1}{1 + e^{-F(X)}}

Градиент здесь выражает насколько предсказанная вероятность pp отклоняется от истинной метки yy.

🔹 Регуляризация в градиентном бустинге

Чтобы избежать переобучения, применяются:

  1. Темп обучения (learning rate) — снижает влияние каждого дерева.

  2. Обрезание деревьев — ограничение глубины дерева.

  3. Subsample — обучение на случайной части данных (стохастический градиентный бустинг).

  4. Feature subsampling — использование случайного подмножества признаков для каждого дерева (как в Random Forest).

  5. L1 и L2-регуляризация на веса листьев.

🔹 Современные реализации

  1. XGBoost. Быстрая и оптимизированная библиотека. Поддерживает параллельность, регуляризацию, кэширование, работу с пропущенными значениями.

  2. LightGBM. Использует метод "histogram-based" и "leaf-wise" рост дерева. Очень быстрая при больших данных.

  3. CatBoost. Является оптимизированной реализацией от Яндекса, работает хорошо с категориальными признаками, автоматическое one-hot кодирование и порядковая обработка.

🔹 Преимущества

  • Высокая точность, особенно на табличных данных.

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

  • Хорошая интерпретируемость (важность признаков, визуализация деревьев).

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

🔹 Недостатки

  • Медленнее в обучении, чем одиночные модели или бэггинг.

  • Модель трудно параллелить по итерациям, хотя внутри итерации возможна параллелизация.

  • Требует тщательной настройки гиперпараметров.

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

🔹 Гиперпараметры

  • n_estimators — количество деревьев.

  • max_depth — глубина дерева.

  • learning_rate — темп обучения.

  • subsample — доля обучающей выборки для каждого дерева.

  • colsample_bytree — доля признаков для обучения дерева.

  • min_child_weight, gamma, lambda, alpha — регуляризационные параметры.

🔹 Пример на Python (XGBoost)

from xgboost import XGBRegressor
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
X, y = make_regression(n_samples=1000, n_features=10, noise=10)
X_train, X_test, y_train, y_test = train_test_split(X, y)
model = XGBRegressor(n_estimators=100, max_depth=4, learning_rate=0.1)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)

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