Адаптивный бустинг: неправильно классифицированные точки получают больший вес на следующей итерации. Каждый слабый классификатор фокусируется на «трудных» примерах.
Наблюдайте как веса точек меняются на каждом шаге AdaBoost
Датасет
Первые 6 точек датасета — как меняются веса на каждом шаге.
Почему это работает и в чём отличие от других методов бустинга
Представьте учителя, который после каждого теста особо внимательно разбирает именно те задачи, с которыми класс не справился. Следующий урок строится вокруг трудных примеров — им уделяется больше времени и внимания.
В AdaBoost каждый слабый классификатор «видит» датасет через призму весов: точки, которые предыдущий классификатор неверно распознал, получают больший вес. Итоговый ответ — взвешенное голосование всех слабых классификаторов, где более точные классификаторы имеют больший голос (α_m).
AdaBoost строит ансамбль из слабых классификаторов (обычно деревьев глубиной 1 — «пней»), последовательно добавляя их по одному. После каждого шага веса точек пересчитываются: неправильно классифицированные точки получают больший вес, правильно классифицированные — меньший. Следующий классификатор вынужден сосредоточиться на «трудных» примерах.
Финальное предсказание — взвешенное голосование всех классификаторов: H(x) = sign(Σ α_m · h_m(x)), где α_m — «голос» m-го классификатора, определяемый его точностью.
| Аспект | AdaBoost | Gradient Boosting |
|---|---|---|
| Как учится | Перераспределяет веса точек | Обучается на псевдо-остатках (градиентах) |
| Слабый классификатор | Пень глубиной 1 (классически) | Дерево любой глубины |
| Функция потерь | Экспоненциальная (фиксированная) | Любая дифференцируемая |
| Веса классификаторов | α_m = 0.5·ln((1−ε)/ε) | Одинаковые (η) или оптимизированные |
| Чувствительность к шуму | Высокая (выбросы раздуваются) | Умеренная |
AdaBoost — это прежде всего алгоритм снижения bias (смещения): каждый новый пень фокусируется именно на точках, где ансамбль ошибается. При этом variance (дисперсия) растёт значительно медленнее, чем у обычного бустинга — именно поэтому AdaBoost редко переобучается даже с большим числом итераций.
Причина устойчивости: теоретически доказано, что «отступы» (margins) — отдалённость предсказания от границы решения — продолжают расти даже после того, как ансамбль достиг нулевой ошибки на обучении. Это и сдерживает рост variance. Заметь: всё это верно только если базовый классификатор прост (пень глубиной 1–2). Глубокие деревья нарушают этот баланс.
Variance у AdaBoost (пурпурная линия) почти не растёт с числом итераций — в отличие от GBM. Total Error продолжает снижаться.
| Параметр | Bias | Variance | Рекомендация |
|---|---|---|---|
| n_estimators ↑ | ↓ снижает | ↑ медленно | Смело увеличивай — риск мал |
| learning_rate ↑ | ↓ быстрее | ↑ умеренно | 0.1–1.0 стандартный диапазон |
| depth = 1 (пень) | ↑ выше | ↓ минимум | Классика AdaBoost — пень оптимален |
| depth ↑ (дерево) | ↓ снижает | ↑↑ резко | Глубже 3–4 — теряешь устойчивость |
Как это работает под капотом — с формулами и разбором на конкретных числах
Каждый пень h_m обучается на той же задаче, но с разными весами точек — те, на которых предыдущий пень ошибся, становятся важнее. Вес пня в ансамбле α_m зависит от его точности: чем меньше ошибок (ε_m), тем громче «голос» этого пня. Финальный ответ — знак взвешенной суммы всех голосов.
5 студентов, задача: предсказать, сдаст ли студент экзамен по количеству часов учёбы.
Датасет — 5 студентов
| i | Часов учёбы | Итог | y |
|---|---|---|---|
| 1 | 1 | провалил | −1 |
| 2 | 2 | сдал | +1 |
| 3 | 3 | провалил | −1 |
| 4 | 4 | сдал | +1 |
| 5 | 5 | сдал | +1 |
Заметь: данные противоречивые — студент с 2 часами сдал, с 3 провалил. Ни один пень не разделит всё идеально.
Начальное состояние — все точки равноправны
AdaBoost принципиально отличается от GBM: здесь нет «остатков» и нет суммирования предсказаний. Вместо этого алгоритм работает с весами точек — числами, которые говорят пню, насколько важна каждая точка при обучении.
В начале мы не знаем ничего — все студенты одинаково важны. Поэтому каждой точке присваивается одинаковый вес: . Сумма всех весов всегда равна 1 — это принципиально, это «бюджет внимания», который перераспределяется между точками по мере обучения.
Посмотри на датасет: студент 2 (2 часа) сдал, студент 3 (3 часа) провалил. Это противоречие — по одному признаку «часы учёбы» их невозможно правильно разделить одним правилом. Именно поэтому никакой одиночный пень не справится с задачей идеально, и нам понадобится ансамбль.
| i | Часов учёбы | Результат | y | Начальный вес w_i |
|---|---|---|---|---|
| 1 | 1 | провалил | −1 | 0.2000 |
| 2 | 2 | сдал | +1 | 0.2000 |
| 3 | 3 | провалил | −1 | 0.2000 |
| 4 | 4 | сдал | +1 | 0.2000 |
| 5 | 5 | сдал | +1 | 0.2000 |
На каждом раунде пень будет обучаться с учётом этих весов: точки с большим весом влияют на выбор порога сильнее. Пока все веса одинаковые — пень просто смотрит на большинство. Но после каждого раунда веса перераспределяются так, что ошибочно классифицированные точки становятся важнее — следующий пень будет вынужден уделить им больше внимания.
Вход: данные (x, y), n_estimators, learning_ratey_i ∈ {−1, +1} (конвертируем из {0, 1})w_i = 1/N для всех i# равные начальные весаfor m = 1 to n_estimators:hₘ = fit_stump(X, y, weights)# обучаем слабый классификаторεₘ = Σᵢ wᵢ · I(hₘ(xᵢ) ≠ yᵢ)# взвешенная ошибкаαₘ = 0.5 · learning_rate · ln((1−εₘ) / εₘ)# вес классификатораwᵢ *= exp(−αₘ · yᵢ · hₘ(xᵢ))# обновляем весаwᵢ /= Σ wⱼ# нормализуемreturn H(x) = sign(Σₘ αₘ · hₘ(x))# финальный ансамбль
Что важно запомнить
| Задача | Рекомендация |
|---|---|
| Бинарная классификация (чистые данные) | Отличный выбор |
| Данные с выбросами или шумом | GBM / XGBoost лучше |
| Регрессия | AdaBoost.R2 (ограниченно) |
| Быстрый прототип с интерпретируемостью | Хороший выбор |
| Многоклассовая классификация | SAMME.R или другие |