Введение

Методы ансамбля — это алгоритмы обучения, которые создают набор классификаторов, а затем классифицируют новые точки данных, взвешивая их прогнозы.

Как правило, ансамбль строится в два этапа. Во-первых, создается ряд базовых учеников, которые могут быть созданы параллельным или последовательным образом. Затем базовые учащиеся объединяются для использования, где среди наиболее популярных комбинированных схем — majority vote для классификации и weighted average для регрессии.

Существует множество эффективных ансамблевых методов. Я объясню два общих метода ансамбля: Boosting и Bagging.

Бэгинг

Бэггинг обучает несколько базовых учеников параллельно. Каждый базовый учащийся обучается на другом образце начальной загрузки, вызывая базовый алгоритм обучения. Начальная выборка получается путем подвыборки обучающего набора данных с заменой, где размер выборки такой же, как и у обучающего набора данных.

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

Примеры упаковки:

  • Случайный лес

Плюсы и минусы упаковки:

Плюсы:

  • Простота реализации
  • Уменьшение дисперсии

Минусы:

  • Потеря интерпретируемости
  • Вычислительно дорого
  • Менее гибкий

Повышение

Повышение — это метод ансамбля, который пытается построить сильный классификатор из набора слабых классификаторов. Сначала из обучающих данных строится одна модель. Затем строится вторая модель, которая пытается исправить ошибки, присутствующие в первой модели. Эта процедура продолжается, и модели добавляются до тех пор, пока либо весь набор обучающих данных не будет правильно предсказан, либо пока не будет добавлено максимальное количество моделей.

Адаптивное повышение / AdaBoost

AdaBoost придумали Йоав Фройнд и Роберт Шапир. Этот метод работает итеративно, идентифицируя неправильно классифицированные точки данных и корректируя их веса, чтобы минимизировать ошибку обучения. Модель продолжает оптимизацию в последовательном порядке до тех пор, пока не будет получен самый сильный предиктор.

Например, предположим, что у нас есть набор данных S:=(x1​,y1​),(x2​,y2​),…,(xn​,yn​), где ∀i, yi​∈{−1,1} и набор функций гипотезы H, из которых мы должны выбрать гипотезу T, чтобы сформировать ансамбль H_T​ и принять решение, используя индивидуальную гипотезу h1​,h2​,…, hT​ в ансамбле следующим образом:

Идея алгоритма AdaBoost заключается в том, что гипотеза t_th исправит ошибки, допущенные первыми гипотезами t−1 в обучающем наборе. В частности, после выбора первых t−1 гипотез мы определяем, в каких экземплярах в S наши t−1 гипотезы плохо работают, и делаем убедитесь, что гипотеза t_th хорошо работает в этих экземплярах. Псевдокод для AdaBoost описывается следующим образом:

Во-первых, мы инициализируем распределение обучающего набора. На каждой итерации 1,2,…, T алгоритма AdaBoost мы определяем распределение вероятностей D по обучающим экземплярам в S. В начале алгоритма мы устанавливаем D1​ как равномерное распределение по экземплярам. То есть:

где n — размер S.

Во-вторых, мы находим гипотезу, которую можно добавить в ансамбль. На i_th итерации мы ищем новую гипотезу, ht​, которая хорошо работает на S, предполагая, что экземпляры взяты из Дт​. Под хорошими показателями мы подразумеваем, что у ht​ должны быть низкие ожидаемые потери 0–1 на S при Dt​. То есть:

Мы называем эту ожидаемую потерю взвешенной потерей, потому что потеря 0–1 вычисляется не для экземпляров в обучающем наборе напрямую, а скорее для взвешенных экземпляров в обучающем наборе.

В-третьих, мы присваиваем новой гипотезе вес. После вычисления ht​ мы присваиваем ht​ весовой коэффициент αt​, основанный на его производительности. Более конкретно, мы придаем ему вес:

Чем выше ϵt​, тем меньше вес и тем меньше вклад гипотезы ht​ в ансамбль.

В-четвертых, мы пересчитываем распределение обучающей выборки. Как только новая гипотеза добавлена ​​в ансамбль, мы повторно вычисляем распределение обучающей выборки, чтобы присвоить каждому экземпляру вероятность, пропорциональную тому, насколько хорошо текущий ансамбль Ht работает на обучающей выборке. Мы вычисляем Dt+1​ следующим образом:

Наконец, повторите шаги со 2 по 4 для еще T-1 итераций.

Повышение градиента

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

Интуитивно понятно, что повышение градиента представляет собой поэтапную аддитивную модель, которая генерирует учащихся в процессе обучения. Вклад слабого ученика в ансамбль основан на процессе оптимизации градиентного спуска.

В отличие от AdaBoost, метод Gradient Boosting не изменяет выборочное распределение, поскольку слабые ученики тренируются на оставшихся ошибках сильного ученика (псевдоостаточное). Обучение на остатках модели является альтернативным способом придания большего значения ошибочно классифицированным наблюдениям.

Алгоритм поясняется следующим образом:

Во-первых, мы инициализируем модель постоянным значением, минимизируя функцию потерь:

где:

  • b0 – прогноз модели, который минимизирует функцию потерь на 0-й итерации.
  • Для потери квадрата ошибки это среднее значение общей обучающей выборки.
  • Для наименьшей абсолютной потери отклонения получается медиана общих обучающих выборок.

Во-вторых, для m=1 до M:

  • Вычислить:

где r_im​ – производная функции потерь относительно F(x) из последней итерации. Для квадрата ошибки это оказывается остатком. Его также называют pseudo-residual, потому что он действует как остаток и является остатком для квадрата убытка.

  • Подгоните базовый обучающий элемент (например, дерево решений) hm​(x) к псевдоостаткам, т. е. обучите его, используя обучающий набор {(xi​,r_im​)}, i=1 to n​.
  • Вычислите множитель γ_m​, решив следующую задачу одномерной оптимизации:

  • Обновите модель:

Семейства функций потерь:

Для непрерывного ответа:

  • Площадь потерь
  • потеря Лапласа
  • Потеря Хубера
  • Квантиль потери

Для категорического ответа:

  • Биномиальная потеря
  • Потеря Адабуста
  • Логистические потери
  • Площадь потерь

Разница между AdaBoost и GBM

Для АдаБуста:

  • Сосредоточьтесь на обучении на ошибочно классифицированных наблюдениях. Изменяет распределение обучающего набора данных для увеличения веса выборок, которые трудно классифицировать.
  • Окончательный прогноз основан на большинстве голосов прогнозов слабых учеников, взвешенных по их индивидуальной точности.

Для ГБМ:

  • Обучает учащихся на основе минимизации функции потерь учащегося (например, обучение на остатках модели)
  • Все учащиеся имеют равные веса в случае GBM. Вес обычно устанавливается как скорость обучения, которая мала по величине.

XGBoost

Математические подробности: https://blog.mattbowers.dev/how-to-understand-xgboost

XGBoost расшифровывается как Extreme Gradient Boosting. Это распараллеленная и тщательно оптимизированная версия алгоритма повышения градиента. Распараллеливание всего процесса бустинга значительно сокращает время обучения.

Некоторые важные особенности XGBoost:

  • Распараллеливание: модель реализована для обучения с несколькими ядрами ЦП.
  • Регуляризация: XGBoost включает различные штрафы за регуляризацию, чтобы избежать переобучения.
  • Нелинейность: XGBoost может обнаруживать и изучать нелинейные шаблоны данных.
  • Масштабируемость: XGBoost может работать распределенно благодаря распределенным серверам и кластерам, таким как Hadoop и Spark, поэтому вы можете обрабатывать огромное количество данных.