Как градиент бустинг регрессор работает
Градиентный бустинг (Gradient Boosting Regressor) — это ансамблевый метод машинного обучения, предназначенный для регрессии (предсказания непрерывных значений), который строит сильную модель путём последовательного добавления слабых моделей (обычно деревьев решений), каждая из которых обучается на ошибках предыдущей.
🧠 Основная идея
Градиентный бустинг — это алгоритм последовательного обучения моделей, где каждая новая модель обучается на остатках (ошибках) предыдущих моделей.
Итоговая модель — это сумма всех слабых моделей, которые вместе дают сильную модель:
y^(x)=FM(x)=∑m=1Mγmhm(x)\\hat{y}(x) = F_M(x) = \\sum_{m=1}^{M} \\gamma_m h_m(x)
где:
-
hm(x)h_m(x) — слабый ученик на итерации mm (например, дерево решений);
-
γm\gamma_m — вес (обычно 1 или находится с помощью оптимизации);
-
MM — общее количество итераций (бустингов).
📉 Почему «градиентный»?
Потому что каждая новая модель обучается на градиенте функции потерь — то есть на том, как нужно улучшить предыдущие предсказания, чтобы минимизировать ошибку.
⚙️ Пошаговая работа алгоритма
Допустим, у нас есть обучающая выборка (xi,yi)(x_i, y_i), где xix_i — признаки, yiy_i — реальные значения. Функция потерь: L(y,y^)L(y, \hat{y}), например, MSE.
Шаг 1: Начальная модель
Инициализируем модель константным значением:
F0(x)=argminγ∑i=1nL(yi,γ)F_0(x) = \\arg\\min_{\\gamma} \\sum_{i=1}^{n} L(y_i, \\gamma)
Например, при использовании MSE:
F0(x)=среднее значение yF_0(x) = \\text{среднее значение } y
Шаг 2: Для m = 1 до M (число итераций/деревьев)
Для каждого шага mm:
- Вычисляем псевдоостатки (градиенты):
ri(m)=−\[∂L(yi,Fm−1(xi))∂Fm−1(xi)\]r_i^{(m)} = - \\left\[ \\frac{\\partial L(y_i, F_{m-1}(x_i))}{\\partial F_{m-1}(x_i)} \\right\]
Например, при MSE:
ri(m)=yi−Fm−1(xi)r_i^{(m)} = y_i - F_{m-1}(x_i)
-
Обучаем регрессор hm(x)h_m(x) на этих остатках ri(m)r_i^{(m)}.
-
Находим оптимальный коэффициент (шаг градиента):
γm=argminγ∑i=1nL(yi,Fm−1(xi)+γhm(xi))\\gamma_m = \\arg\\min_{\\gamma} \\sum_{i=1}^{n} L(y_i, F_{m-1}(x_i) + \\gamma h_m(x_i))
- Обновляем модель:
Fm(x)=Fm−1(x)+γmhm(x)F_m(x) = F_{m-1}(x) + \\gamma_m h_m(x)
📌 Пример для MSE
Пусть используется среднеквадратичная ошибка:
L(y,y^)=12(y−y^)2L(y, \\hat{y}) = \\frac{1}{2}(y - \\hat{y})^2
-
Градиент: ∂L∂y^=y^−y\frac{\partial L}{\partial \hat{y}} = \hat{y} - y
-
Значит, псевдоостатки: ri=yi−y^ir_i = y_i - \hat{y}_i
То есть на каждом шаге мы:
-
Считаем, где модель ошиблась.
-
Строим новое дерево, которое учится предсказывать эти ошибки.
-
Добавляем это дерево в ансамбль, уменьшая общую ошибку.
🌲 Почему деревья?
-
Обычно в градиентном бустинге используются мелкие деревья решений (decision trees), часто с глубиной 3–6.
-
Они неплохо аппроксимируют нелинейные зависимости, и легко обучаются.
-
Композиция многих слабых деревьев → сильная модель.
🛠 Гиперпараметры Gradient Boosting Regressor
-
n_estimators — количество деревьев в ансамбле.
-
learning_rate — насколько сильно каждое дерево влияет на итоговую модель (чем меньше, тем медленнее и стабильнее обучение).
-
max_depth — глубина каждого дерева.
-
subsample — доля случайных данных для обучения каждого дерева (важно для борьбы с переобучением).
-
loss — функция потерь (по умолчанию MSE, но могут быть Huber, Quantile и др.).
📉 Недостатки
-
Долгое обучение (по сравнению с Random Forest).
-
Склонность к переобучению без правильной настройки параметров.
-
Плохо параллелится (деревья строятся последовательно).
🚀 Библиотеки
-
sklearn.ensemble.GradientBoostingRegressor
-
XGBoost
-
LightGBM
-
CatBoost
Эти фреймворки используют различные улучшения над классическим градиентным бустингом:
-
Обрезка деревьев.
-
Специальные потери (например, Huber).
-
Улучшения по скорости и памяти.
-
Более точная оптимизация шагов.
📋 Сравнение с Random Forest
Random Forest | Gradient Boosting | |
---|---|---|
Строит деревья | Параллельно | Последовательно |
--- | --- | --- |
Ансамбль | Усреднение/голосование | Суммирование (аддитивная модель) |
--- | --- | --- |
Переобучение | Устойчив к переобучению | Может переобучаться при неправильной настройке |
--- | --- | --- |
Скорость | Быстрее в обучении | Медленнее |
--- | --- | --- |
Точность | Ниже на сложных задачах | Обычно выше при хорошей настройке |
--- | --- | --- |
Градиентный бустинг — один из самых мощных инструментов для задач регрессии, особенно когда требуется высокая точность и модель может быть «дорогой» по вычислениям.