Алгоритмы бустинга — различия между версиями
Wdywbac (обсуждение | вклад) м |
|||
Строка 1: | Строка 1: | ||
+ | {| class="wikitable" align="center" style="color: red; background-color: black; font-size: 56px; width: 800px;" | ||
+ | |+ | ||
+ | |-align="center" | ||
+ | |'''НЕТ ВОЙНЕ''' | ||
+ | |-style="font-size: 16px;" | ||
+ | | | ||
+ | 24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян. | ||
+ | |||
+ | Будучи гражданами Российской Федерации, мы против своей воли оказались ответственными за нарушение международного права, военное вторжение и массовую гибель людей. Чудовищность совершенного преступления не оставляет возможности промолчать или ограничиться пассивным несогласием. | ||
+ | |||
+ | Мы убеждены в абсолютной ценности человеческой жизни, в незыблемости прав и свобод личности. Режим Путина — угроза этим ценностям. Наша задача — обьединить все силы для сопротивления ей. | ||
+ | |||
+ | Эту войну начали не россияне, а обезумевший диктатор. И наш гражданский долг — сделать всё, чтобы её остановить. | ||
+ | |||
+ | ''Антивоенный комитет России'' | ||
+ | |-style="font-size: 16px;" | ||
+ | |Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению. | ||
+ | |-style="font-size: 16px;" | ||
+ | |[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки]. | ||
+ | |} | ||
+ | |||
[[Бустинг, AdaBoost | Бустинг]] {{---}} это композиция алгоритмов, где на каждой итерации алгоритм пытается исправить все ошибки композиции предыдущих алгоритмов. | [[Бустинг, AdaBoost | Бустинг]] {{---}} это композиция алгоритмов, где на каждой итерации алгоритм пытается исправить все ошибки композиции предыдущих алгоритмов. | ||
Версия 06:26, 1 сентября 2022
НЕТ ВОЙНЕ |
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян. Будучи гражданами Российской Федерации, мы против своей воли оказались ответственными за нарушение международного права, военное вторжение и массовую гибель людей. Чудовищность совершенного преступления не оставляет возможности промолчать или ограничиться пассивным несогласием. Мы убеждены в абсолютной ценности человеческой жизни, в незыблемости прав и свобод личности. Режим Путина — угроза этим ценностям. Наша задача — обьединить все силы для сопротивления ей. Эту войну начали не россияне, а обезумевший диктатор. И наш гражданский долг — сделать всё, чтобы её остановить. Антивоенный комитет России |
Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению. |
meduza.io, Популярная политика, Новая газета, zona.media, Майкл Наки. |
Бустинг — это композиция алгоритмов, где на каждой итерации алгоритм пытается исправить все ошибки композиции предыдущих алгоритмов.
Содержание
LogitBoost
Идея алгоритма
Проблема AdaBoost — если модель сильно разреженная, есть какое-то количество выбросов в данных, то у модели будет большая ошибка и слабая обощающая способность. Основной принцип адаптивных бустингов — стремимся увеличить веса объектов, которые предсказаны плохо, чтобы они попали в следующую выборку данных. В AdaBoost это делается при помощи домножения на экспоненту. Мы хотим, чтобы неверные предсказания быстрее попали в верную область. Для этого вместо экспоненты можно использовать логистическую функцию. У нее более крутой изгиб, она сильнее изменяется, поэтому веса неверных объектов будут больше увеличиваться, а верные объекты наоборот быстрее перестанут учитываться. Такая модель лучше работает с обучением, так как быстрее получается выделить не совсем характерные данные и обучить ансамбль на них. В случае LogitBoost алгоритма мы на каждой итерации минимизируем логистическую функцию потерь: $-\log(1 + e^{-2yH})$, где $y$ — значение, $H$ — построенный классификатор.
Рассмотрим алгоритм сразу для классификации на несколько классов: пусть у нас есть $m$ объектов-векторов и $J$ классов. Заведем матрицу, в которой элемент $w_{ij} $— вес $i-$го объекта $j-$го класса. Изначально $w_{ij} = \frac{1}{m}, \; F_j(x) = 0, \; p_j(x) = 0$.
Алгоритм
function LogitBoost(): for $t = 1,\ldots,T$: for $j = 1,\ldots,J$: //Пересчитываем веса и нормализацию для j-го классаПри помощи взвешенного МНК строим линейную регрессию $z$ от $x$ с весами $w$ на $h_{tj}$ return
BrownBoost
Идея алгоритма
Расмотренные ранее AdaBoost и LogitBoost плохо работают при наличии шума в данных, что может приводить к переобучению. На каждой итерации бустинга объектам присваиваются веса, и большой вес у объекта показывает, что алгоритм плохо отработал на нем. Это может быть индикатором того, что этот объект шумовой. В случае Ada- и LogitBoost модель будет пытаться обучиться на них и через несколько итераций останутся только шумовые данные. Однако, если «откидывать» объекты с большим весом при работе алгоритма, на итоговый классификатор будут влиять незашумленные объекты. Из-за этого итоговая функция ошибки может улучшиться.
Пусть дана обучающая выборка
длины . Мы можем задать время $c$, которое будет работать алгоритм бустинга. Чем больше это время, тем дольше будет работать алгоритм, а значит тем меньше данных он будет считать зашумленными и «откидывать». Каждая итерация занимает $t_i$ времени, и мы считаем, сколько осталось работать времени — $s$.Можно связать время работы алгоритма $c$ и итоговую ошибку:
где $erf$ — функция ошибок[1]. Из этого следует, что мы можем получить любую желаемую итоговую ошибку, передав соответствующий параметр $c$ (это можно вычислить при помощи обратной функции ошибок).
Для всех объектов обучающий выборки хранятся веса на каждой итерации $r_i(x, y)$. Изначально они все равны 0. Чтобы избежать вырожденные случаи, введем константу $\nu > 0$.
Основная идея BrownBoost — на каждой итерации у слабого классификатора есть вес
и количество прошедшего в течение итерации времени , и эти величины напрямую связаны между собой. Чтобы их найти, надо решить систему нелинейных уравнений. Она задана дифференциальным уравнениеми граничными условиями:
.Решением системы будет считаться пара чисел [2], как это было предложено автором BrownBoost'а Йоав Фройндом[3].
или $\gamma_i \leq \nu$. Решить данную систему можно методом НьютонаАлгоритм
function BrownBoost($T$, $c$): do://Задаем вес для каждого объекта Вызываем базовый алгоритм и находим классификатор // Решение системы уравнений [*] //Обновляем веса каждого объекта s = s - t //Обновляем оставшееся время while return //$H(x)$ — результирующий классификатор
Мультиклассовая классификация
Данный алгоритм можно обобщить с бинарной классификации на мультиклассовую при помощи метода Error-Correcting Output Codes (ECOC)[4]. Для этого введем ECOC матрицу. Для каждого элемента $(x_n, y_n)$ и класса $j$ вес будет пересчитываться следующим образом:
где $\lambda_j^n$ соответствует элементу класса $j$ в ECOC матрице.