Ансамблевый метод, где каждое следующее дерево исправляет ошибки предыдущего. Один из самых эффективных алгоритмов на табличных данных.
Играйте с параметрами — наблюдайте как меняется модель в реальном времени
Датасет
Строки подсвечиваются при изменении — переключайте шаги в элементах управления выше.
Как работает Gradient Boosting — без формул
Представьте команду экспертов, где каждый следующий специально изучает ошибки предыдущего. Первый эксперт даёт грубую оценку. Второй смотрит, где первый ошибся, и корректирует. Третий исправляет то, что не доделал второй — и так далее. Итоговый ответ команды гораздо точнее любого одиночки.
В Gradient Boosting роль каждого «эксперта» играет простое решающее дерево. Каждое новое дерево обучается не на исходных данных, а на остатках — разнице между тем, что модель предсказала, и тем, что было на самом деле.
Gradient Boosting строит модель итеративно: на каждом шаге добавляется новое слабое дерево, которое аппроксимирует отрицательный градиент функции потерь. Это универсальный принцип — меняя функцию потерь, можно решать регрессию, классификацию и ранжирование одним и тем же алгоритмом.
Gradient Boosting — это прежде всего инструмент снижения bias (смещения): каждое новое дерево исправляет ошибки предыдущих, и модель всё точнее описывает обучающие данные. Но чем дольше мы бустим — тем сильнее растёт variance (дисперсия): модель начинает запоминать шум, и её предсказания на новых данных ухудшаются.
Ключевой приём: learning_rate ↓ + n_estimators ↑ пропорционально. Медленный бустинг снижает bias так же хорошо, но variance растёт значительно медленнее — модель обобщает лучше.
По мере роста числа итераций bias монотонно падает, variance растёт. Минимум суммарной ошибки — оптимальная точка остановки.
| Параметр | Bias | Variance | Рекомендация |
|---|---|---|---|
| n_estimators ↑ | ↓ снижает | ↑ повышает | Контролируй через learning_rate |
| learning_rate ↑ | ↓ быстрее | ↑↑ резко | Уменьши η, увеличь M — итог лучше |
| max_depth ↑ | ↓ снижает | ↑↑ сильно | Оптимум 3–5 уровней |
| subsample < 1 | ~ нейтрально | ↓ снижает | 0.7–0.9 добавляет стохастику |
Как это работает под капотом — с формулами и разбором на конкретных числах
На каждом шаге мы добавляем новое дерево h_m, умноженное на learning rate. Дерево обучено предсказывать псевдо-остатки — направление, в котором нужно скорректировать текущую модель.
Возьмём 5 домов и запустим бустинг от нуля. Видно каждое число.
Датасет — 5 домов
| i | Площадь (×10 м²) | Цена (×$100k) |
|---|---|---|
| 1 | 10 | 3.0 |
| 2 | 15 | 4.5 |
| 3 | 20 | 5.0 |
| 4 | 25 | 7.0 |
| 5 | 30 | 8.5 |
Learning rate η = 0.5, пни глубины 1
F₀ — начальное предсказание (до первого дерева)
Мы начинаем с нуля — никакой модели ещё нет. Прежде чем строить деревья, нам нужно с чего-то стартовать. Самый простой и математически обоснованный вариант — предсказывать для всех домов одно и то же значение: среднее всех цен.
Почему именно среднее? Потому что среди всех возможных константных предсказаний среднее даёт наименьшую среднеквадратичную ошибку. Это можно доказать математически, но интуитивно тоже понятно: если не знаешь ничего конкретного — лучшая ставка это среднее.
Теперь посмотрим в таблицу ниже. Столбец «Остаток y − F₀» — это насколько мы ошиблись для каждого дома. Остаток считается как: реальная цена минус наше предсказание.
Отрицательный остаток означает: мы завысили цену (предсказали 5.6, а реальная цена меньше). Положительный остаток означает: мы занизили цену (предсказали 5.6, а дом стоит дороже). Именно эти остатки станут «учебным материалом» для первого дерева в следующем раунде.
| i | Площадь | Цена y | F₀ | Остаток y−F₀ |
|---|---|---|---|---|
| 1 | 10 | 3.0 | 5.6 | -2.60 |
| 2 | 15 | 4.5 | 5.6 | -1.10 |
| 3 | 20 | 5.0 | 5.6 | -0.60 |
| 4 | 25 | 7.0 | 5.6 | +1.40 |
| 5 | 30 | 8.5 | 5.6 | +2.90 |
Как MSE падает с каждым раундом
Активный раунд подсвечен. Три дерева — минус 92% ошибки.
1Вход: данные (x, y), n_estimators, learning_rate, max_depth3F₀(x) = mean(y) # инициализация константой5for m = 1 to n_estimators:6rᵢ = yᵢ − F_{m-1}(xᵢ) для всех i # псевдо-остатки7hₘ = fit_tree(X, r, max_depth) # дерево на остатках8F_m(x) = F_{m-1}(x) + η · hₘ(x) # обновление модели10return F_n # итоговая модель
Что важно запомнить
| Задача | Рекомендация |
|---|---|
| Регрессия (дома, цены) | Отличный выбор |
| Бинарная классификация | Отличный выбор |
| Многоклассовая классификация | Хороший выбор |
| Ранжирование (поиск, рекомендации) | XGBoost / LightGBM лучше |
| Данные с высокой кардинальностью | CatBoost лучше |