BrownBoost

BrownBoost — алгоритм бустинга, который показал свою эффективность на зашумленных наборах данных. Как и все алгоритмы бустинга, BrownBoost используется в сочетании с другими алгоритмами машинного обучения. Алгоритм BrownBoost был предложен Йоавом Фройндом (en:Yoav Freund)[1].

Мотивировка

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

Описание алгоритма

BrownBoost использует невыпуклую функцию потерь, поэтому он не попадает в семейство алгоритмов AnyBoost. Невпуклая оптимизация позволяет избежать переобучения на зашумленных наборах данных. В отличие от алгоритмов бустинга (таких как AdaBoost и LogitBoost), которые минимизируют выпуклую функцию потерь, BrownBoost решает систему из 2 уравнений с двумя неизвестными, используя стандартные численные методы.

Единственный параметр алгоритма BrownBoost это  — «время», которое алгоритм работает. Каждому слабому классификатору даётся время , которое напрямую связано с весом классификатора.

Большое значение означает, что BrownBoost будет считать данные менее зашумленными и отбросит меньше элементов обучающей выборки. Соответственно, малое значение означает, что BrownBoost будет считать данные более зашумленными и отбросит больше элементов обучающей выборки. На каждом шаге алгоритм выбирает базовый классификатор немного лучше, чем просто случайным образом. Вес этого классификатора и количество прошедшего в течение итерации времени задаются решением системы 2 нелинейных уравнений (1. нескоррелированность базового классификатора и весов элементов обучающей выборки; 2. неизменность потенциала) с 2 неизвестными. Эта система может быть решена методом дихотомии, как реализовано в пакете JBoost, или методом Ньютона, как в оригинальной статье автора. После решения уравнений веса элементов обучающей выборки и количество оставшегося времени пересчитывается. Эта процедура повторяется, пока не кончится всё время.

Начальный потенциал определяется как . Так как каждый шаг алгоритма не меняет потенциал, то верно равенство . Поэтому конечная ошибка вероятно близка к . Тем не менее, конечная функция потенциала не является бинарной функцией потерь.

Чтобы конечная функция потерь была в точности , дисперсия должна линейно убывать по времени, чтобы сформировать бинарную функцию потерь после окончания итераций бустинга. Этот момент еще не описан в литературе и отсутствует в определении алгоритма ниже.

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

Алгоритм

Вход:

  • обучающая выборка где
  • параметр

Инициализация:

  • . Значение это количество оставшегося времени работы алгоритма.
  •   . Значения это веса на итерации для элемента обучающей выборки .

Пока :

  • Установить вес каждого элемента обучающей выборки: , здесь вес элемента
  • Найти базовый классификатор такой что
  • Найти значения удовлетворяющие уравнению:
    .
    (Заметим что это схоже условию [3].) В этом пункте мы численно находим such that .)
    Это изменение должно соответствовать ограничению
    ,
    здесь потери потенциала для точки с весом
  • Обновить веса для каждого элемента обучающей выборки:
  • Обновить оставшееся время:

Выход:

Эмпирические результаты

В предварительных экспериментах BrownBoost имеет меньшую ошибку обобщающей способности по сравнению с AdaBoost и имеет схожие результаты с LogitBoost.[4] Реализацию BrownBoost можно найти в open source пакете JBoost.

Примечания

См. также