Алгоритм AdaBoost: как слабые классификаторы дают сильный

AdaBoost (Adaptive Boosting) - классический алгоритм бустинга, который из набора слабых, едва угадывающих классификаторов собирает один сильный. Идея проста и красива: модели обучаются по очереди, и каждая следующая сосредотачивается на тех объектах, где предыдущие ошиблись. Объекты, которые упорно классифицируются неверно, постепенно «тяжелеют» и притягивают к себе внимание ансамбля. Ниже разберём механику пошагово, выведем ключевые формулы и посмотрим на калькуляторе, как вес одного классификатора зависит от его ошибки.
Что такое бустинг и зачем он нужен
Бустинг - это семейство ансамблевых методов, в которых базовые модели строятся последовательно, а не параллельно. В этом его отличие от бэггинга, где деревья учатся независимо на бутстрэп-выборках. В бустинге каждая новая модель исправляет ошибки уже построенного ансамбля.
AdaBoost, предложенный Йоавом Фройндом и Робертом Шапире в 1995 году, был первым практичным алгоритмом бустинга и принёс авторам премию Гёделя. Главная его задача - снижать смещение (bias): отдельный слабый классификатор систематически недообучен, но их взвешенная сумма приближает сложную разделяющую границу.
Слабый классификатор (weak learner) - это модель, которая работает лишь немного лучше случайного угадывания: её ошибка чуть меньше для бинарной задачи. Чаще всего в роли слабого ученика выступает решающий пень (decision stump) - дерево глубиной 1, делающее единственное разбиение по одному признаку. Поразительный результат теории бустинга в том, что из таких заведомо примитивных моделей можно собрать ансамбль со сколь угодно малой ошибкой на обучении, если только каждая базовая модель чуть-чуть лучше монетки.
Перевзвешивание объектов: сердце алгоритма
Ключевой механизм AdaBoost - адаптивные веса объектов. В начале всем объектам обучающей выборки присваивается одинаковый вес . После каждого раунда веса пересчитываются: объекты, на которых ансамбль ошибся, получают больший вес, а верно классифицированные - меньший.

В результате следующий слабый классификатор обучается уже на «перекошенной» выборке, где трудные примеры весят больше, и вынужден разбираться именно с ними. Так ансамбль методично закрывает пробелы предыдущих моделей, а не повторяет одну и ту же ошибку.
Вес классификатора: формула и её смысл
После того как очередной слабый классификатор обучен, считается его взвешенная ошибка - сумма весов объектов, на которых он ошибся:
По ней вычисляется вес самого классификатора в итоговом ансамбле:
Эта формула - не произвольная: она получается минимизацией экспоненциальной функции потерь , которую AdaBoost оптимизирует по сути методом покоординатного спуска. Логику веса хорошо видно на графике.

При малой ошибке вес : почти безошибочный классификатор получает огромное право голоса. При вес обнуляется - классификатор не лучше монетки и в ансамбль не входит. При вес отрицателен, и AdaBoost попросту инвертирует ответы такого классификатора.
Правило обновления весов
Зная , веса объектов обновляются по экспоненциальному правилу:
Для бинарных меток произведение равно на верных объектах и на ошибочных. Поэтому правило распадается на два случая:
После этого веса нормируются делением на сумму , чтобы снова получить корректное распределение. Чем больше (чем точнее классификатор), тем сильнее раздвигаются веса верных и ошибочных объектов.
Разберём один раунд на числах. Пусть в выборке 5 объектов с равными весами , и классификатор ошибся на двух из них. Тогда взвешенная ошибка , вес классификатора . Верные объекты домножаются на , ошибочные - на . После нормировки доля «трудных» объектов в общем весе вырастает примерно с до - именно на них и будет настраиваться следующий слабый классификатор.
Итоговый ансамбль
Когда построены все слабых классификаторов, финальный прогноз - это взвешенное голосование по знаку:
Каждый классификатор голосует своим ответом , но с весом : точные модели влияют сильнее, слабые - слабее. Знак суммы и даёт итоговую метку класса. По сравнению с одним деревом или случайным лесом AdaBoost достигает высокой точности за счёт фокуса на трудных примерах, а не за счёт усреднения независимых моделей.
Удобный признак сходимости: если на каждом раунде взвешенная ошибка $\varepsilon_t$ строго меньше $0{,}5$, то ошибка ансамбля на обучении убывает экспоненциально с ростом числа раундов $T$.
Алгоритм целиком по шагам
Соберём механику в единый цикл:
- Инициализировать веса для всех объектов.
- Для :
- обучить слабый классификатор на выборке с весами ;
- посчитать взвешенную ошибку ;
- вычислить вес ;
- обновить веса и нормировать.
- Вернуть ансамбль .
Число раундов - главный гиперпараметр: слишком малое не успеет снизить ошибку, слишком большое грозит переобучением на шумных данных.
Сильные и слабые стороны
Преимущества AdaBoost:
- Простота и мало настроек. По сути единственный важный параметр - число раундов ; базовый ученик обычно фиксирован (пень).
- Высокая точность на чистых данных: ансамбль уверенно снижает смещение.
- Универсальность базы: в роли может выступать почти любой слабый классификатор.
Ограничения:
- Чувствительность к шуму и выбросам. Стабильно неверный объект бесконечно тяжелеет и перетягивает внимание ансамбля на себя.
- Уступает по гибкости градиентному бустингу, где минимизируется произвольная дифференцируемая функция потерь, а не только экспоненциальная.
Частые ошибки
- Брать сильный базовый классификатор. Если слишком мощный (глубокое дерево), он сам переобучится, и смысл бустинга теряется. Нужен именно слабый ученик.
- Игнорировать выбросы. Шумные и ошибочно размеченные объекты в AdaBoost «взрываются» по весу. Перед обучением стоит почистить данные.
- Путать с бэггингом. В бэггинге модели независимы и усредняются для снижения дисперсии; в AdaBoost они последовательны и взвешены для снижения смещения.
- Считать, что ломает алгоритм. Не ломает: вес становится отрицательным, ответы инвертируются. Проблема возникает только при ровно - такой классификатор бесполезен.
- Брать слишком большое на шумных данных. Лишние раунды начинают подгонять ансамбль под выбросы.
FAQ
Чем AdaBoost отличается от градиентного бустинга? AdaBoost минимизирует экспоненциальную функцию потерь и делает это через перевзвешивание объектов. Градиентный бустинг обобщает идею: он строит модели по антиградиенту произвольной дифференцируемой функции потерь, что даёт больше гибкости (регрессия, разные метрики, регуляризация).
Можно ли применять AdaBoost к многоклассовой задаче? Да. Базовый алгоритм описан для бинарной классификации, но есть расширения SAMME и AdaBoost.M1, которые обобщают веса и правило обновления на несколько классов.
Почему именно решающий пень используют как слабого ученика? Пень - самая простая модель «чуть лучше монетки»: один порог по одному признаку. Он гарантированно слабый (нужное условие для бустинга), быстро обучается и не переобучается сам, оставляя всю работу по усложнению границы ансамблю.
Коротко
AdaBoost строит сильный классификатор как взвешенную сумму слабых, обучаемых по очереди. После каждого раунда веса ошибочно классифицированных объектов растут, и следующая модель сосредотачивается на трудных примерах. Вес классификатора в ансамбле задаётся формулой : он велик при малой ошибке, обнуляется при и отрицателен правее. Итоговый прогноз - знак взвешенного голосования . Алгоритм прост и точен, но чувствителен к шуму, поэтому требует чистых данных и осторожного выбора числа раундов.
Читайте также

Алгоритм CatBoost: бустинг с обработкой категорий
Алгоритм CatBoost простыми словами: упорядоченный бустинг против сдвига прогноза, кодирование категориальных признаков через ordered target statistics, симметричные деревья и разбор типовых задач.

Алгоритм LightGBM: быстрый градиентный бустинг
Алгоритм LightGBM простыми словами: рост дерева по листьям против роста по уровням, гистограммы признаков, GOSS и EFB, настройка num_leaves и learning rate, борьба с переобучением и разбор задач.

Алгоритм policy gradient: как обучают стратегию напрямую
Разбираем алгоритм policy gradient: теорема о градиенте, формула REINFORCE, роль baseline и log-производной. С примерами вывода, типовыми ошибками и интерактивным расчётом сходимости.