В чём разница между bagging и boosting? Назовите реализации каждого из них в scikit-learn.
Bagging обучает модели параллельно на бутстрап-выборках и усредняет результат (снижает дисперсию). Boosting обучает последовательно, каждая следующая модель исправляет ошибки предыдущей (снижает смещение). В sklearn: BaggingClassifier, RandomForestClassifier; GradientBoostingClassifier, AdaBoostClassifier.
Bagging и Boosting: ключевое различие
Bagging (Bootstrap Aggregating) обучает базовые модели независимо и параллельно на случайных подвыборках с возвращением. Итоговый прогноз — среднее (регрессия) или голосование (классификация). Главный эффект — снижение дисперсии при сохранении уровня смещения.
Boosting обучает базовые модели последовательно: каждая новая модель фокусируется на объектах, где предыдущие ошиблись. Итоговый прогноз — взвешенная сумма. Главный эффект — снижение смещения, но риск переобучения при большом числе итераций.
Реализации в scikit-learn
- Bagging:
BaggingClassifier/BaggingRegressor— универсальная обёртка для любого estimator;RandomForestClassifier/RandomForestRegressor— bagging деревьев с дополнительной рандомизацией признаков (Extra-Trees:ExtraTreesClassifier). - Boosting:
AdaBoostClassifier— обновляет веса объектов;GradientBoostingClassifier/GradientBoostingRegressor— градиентный бустинг на деревьях;HistGradientBoostingClassifier— быстрая версия на гистограммах (аналог LightGBM).
Пример: сравнение на одном датасете
from sklearn.datasets import make_classification
from sklearn.ensemble import (
RandomForestClassifier,
GradientBoostingClassifier,
BaggingClassifier,
AdaBoostClassifier,
)
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import cross_val_score
import numpy as np
X, y = make_classification(n_samples=1000, n_features=20,
n_informative=10, random_state=42)
models = {
"Bagging(DT)": BaggingClassifier(
estimator=DecisionTreeClassifier(), n_estimators=100, random_state=42
),
"RandomForest": RandomForestClassifier(n_estimators=100, random_state=42),
"AdaBoost": AdaBoostClassifier(n_estimators=100, random_state=42),
"GradientBoosting": GradientBoostingClassifier(n_estimators=100, random_state=42),
}
for name, model in models.items():
scores = cross_val_score(model, X, y, cv=5, scoring="roc_auc")
print(f"{name:25s}: {scores.mean():.4f} ± {scores.std():.4f}")
Когда что выбирать
- Модель переобучается (высокая дисперсия) → Bagging / RandomForest.
- Модель недообучается (высокое смещение) → Boosting.
- Нужна скорость обучения на большом датасете →
HistGradientBoostingClassifier. - Интерпретируемость важна → RandomForest (feature importances, легче объяснить).
Подводные камни
- Утечка данных в бустинге: если подбирать
n_estimatorsна test-выборке, метрика будет завышена — используйтеearly_stoppingили отдельный validation set. - Параллелизм bagging vs boosting: RandomForest поддерживает
n_jobs=-1(параллельное обучение), GradientBoosting — нет (деревья строятся последовательно); HistGradientBoosting поддерживает. - Чувствительность бустинга к выбросам: AdaBoost значительно усиливает вес аномальных объектов; GradientBoosting менее чувствителен при использовании устойчивых функций потерь (
loss="huber"). - Переобучение бустинга: большое
n_estimatorsбез регуляризации (learning_rate,max_depth,subsample) приводит к переобучению; для bagging этот риск значительно ниже. - RandomForest и несбалансированные классы: параметр
class_weight="balanced"корректирует выборку, иначе лес смещается в сторону большинства. - Воспроизводимость: обязательно фиксируйте
random_state— иначе результаты кросс-валидации будут отличаться между запусками. - Память при большом числе деревьев: каждое дерево хранится в RAM; 1000 деревьев на глубоком датасете могут занять несколько GB — контролируйте
max_depthиmax_leaf_nodes.
Common mistakes
- Объяснять
bagging vs boostingтолько синтаксисом без shape, dtype, состояния или режима выполнения. - Игнорировать leakage, воспроизводимость, пустые входы и скрытые копии данных.
- Не проверять production-симптомы: latency, память, ретраи, дрейф качества и несовпадение версий.
What the interviewer is testing
- Может ли связать
bagging vs boostingс реальным контрактом входов и выходов. - Упоминает ли тесты, метрики, reproducibility и диагностику ошибок.
- Видит ли различие между demo-кодом в ноутбуке и production-пайплайном.