Как ответить
Градиентный бустинг — это ансамблевый метод машинного обучения, который строит модель последовательно: каждый новый решающий дерево исправляет ошибки предыдущего. В отличие от бэггинга (Random Forest), где деревья независимы, в бустинге каждое следующее дерево обучается на остатках — разнице между предсказанием ансамбля и истинным значением. На практике это даёт высокую точность, но требует аккуратной настройки, чтобы не переобучиться.
Устроен метод так:
- Инициализация: начинаем с константного предсказания, обычно среднего значения целевой переменной для регрессии или log(odds) для классификации.
- Итерация: для каждого шага m = 1..M:
- Считаем псевдо-остатки: отрицательный градиент функции потерь по текущим предсказаниям. Для MSE это просто (y - F(x)).
- Обучаем решающее дерево (обычно глубины 3-6) предсказывать эти остатки.
- Добавляем дерево в ансамбль с коэффициентом learning_rate (обычно 0.01-0.3): F_m(x) = F_{m-1}(x) + lr * tree(x).
- Регуляризация: кроме lr, используют subsample (столбцов и строк), min_child_weight, max_depth, gamma. Без них модель быстро переобучается.
Ключевой момент — градиентный спуск в функциональном пространстве. Мы не подбираем веса признаков, а ищем функцию, минимизирующую лосс. Каждое дерево — это шаг в направлении антиградиента.
Пример кода на Python с XGBoost:
import xgboost as xgb
model = xgb.XGBRegressor(
n_estimators=100,
max_depth=4,
learning_rate=0.1,
subsample=0.8,
colsample_bytree=0.8
)
model.fit(X_train, y_train)На практике бустинг — стандарт для табличных данных. LightGBM и CatBoost — его оптимизированные версии: первый использует гистограммы и GOSS для скорости, второй — ordered boosting для работы с категориями. Главный недостаток — чувствительность к выбросам и необходимость подбора гиперпараметров.