← Назад к вопросам

Почему в бустинге не используется регрессия в качестве базового алгоритма?

2.0 Middle🔥 131 комментариев
#Машинное обучение

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Это неправда. Регрессия ИСПОЛЬЗУЕТСЯ в бустинге, но есть нюансы.

На самом деле, регрессионные алгоритмы используются в бустинге, но часто для решения регрессионных задач, а не классификационных. Давайте разберёмся.

Бустинг для классификации vs регрессии

AdaBoost (изначально для классификации):

  • Базовый алгоритм: Decision Tree Classifier (shallow trees)
  • Логика: взвешивает неправильно классифицированные примеры

Gradient Boosting (универсальный):

  • Может работать с любой loss function
  • Для классификации: log loss
  • Для регрессии: MSE, MAE, Huber loss

XGBoost, LightGBM, CatBoost:

  • Используют Decision Tree Regressors как базовые модели
  • Могут решать классификацию через регрессию

Чем отличаются подходы?

AdaBoost для классификации:

  • Базовый алгоритм: Decision Tree Classifier
  • Выбирает примеры с весами, обучает, увеличивает вес неправильных

Gradient Boosting (любой вариант):

  • Базовый алгоритм: Decision Tree Regressor
  • На каждой итерации обучается дерево для предсказания остатков
  • Остатки — непрерывные значения (регрессионная задача!)
# Упрощённый пример Gradient Boosting
F_0(x) = y.mean()  # Первое приближение

for i in range(n_estimators):
    residuals = y - F_i(x)  # Остатки — регрессионная задача!
    tree = DecisionTreeRegressor(...)  # РЕГРЕССОР
    tree.fit(X, residuals)
    F_{i+1}(x) = F_i(x) + learning_rate * tree.predict(x)

Почему Gradient Boosting использует регрессию?

  1. Остатки — непрерывные значения — для их предсказания нужна регрессия
  2. Гибкость loss function — можно использовать любую дифференцируемую функцию
  3. Быстрая сходимость — регрессионные деревья лучше предсказывают остатки

Практическое сравнение

import numpy as np
from sklearn.ensemble import GradientBoostingClassifier, AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import make_classification

X, y = make_classification(n_samples=1000, n_features=20, random_state=42)

# AdaBoost: классификатор как базовый алгоритм
ada = AdaBoostClassifier(
    estimator=DecisionTreeClassifier(max_depth=1),
    n_estimators=100
)
ada.fit(X, y)
print("AdaBoost accuracy:", ada.score(X, y))

# Gradient Boosting: внутри использует регрессионные деревья!
gb = GradientBoostingClassifier(n_estimators=100)
gb.fit(X, y)
print("Gradient Boosting accuracy:", gb.score(X, y))

Итоги

Тип бустингаБазовый алгоритмИспользует регрессию?
AdaBoost (классификация)Decision Tree ClassifierНет (специализирован)
Gradient BoostingDecision Tree RegressorДА!
XGBoostDecision Tree RegressorДА!
LightGBMDecision Tree RegressorДА!
CatBoostDecision Tree RegressorДА!

Вывод: В современном бустинге (Gradient Boosting, XGBoost, LightGBM) регрессия используется как базовый алгоритм для предсказания остатков. AdaBoost исторически разрабатывалась для классификации, поэтому использует специализированную логику взвешивания. Но для практического применения — используй XGBoost/LightGBM, они лучше.

Почему в бустинге не используется регрессия в качестве базового алгоритма? | PrepBro