Задумывались ли вы, просматривая ноутбуки Kaggle, как лучшие конкуренты предлагают блестящие модели с высокой точностью? Ответ прост - это использование ансамблевых методов в их моделях. Adaboost - это метод итеративного ансамбля, при котором все данные вводятся в несколько базовых моделей (слабые классификаторы), а окончательный прогноз делается путем вычисления взвешенной суммы этих базовых моделей. Самая интересная особенность этого алгоритма заключается в том, что каждая базовая модель создается таким образом, что каждая из базовых моделей учится на ошибках, допущенных предыдущими, и в результате этого она итеративно постепенно уменьшает ошибку обучения и улучшает классификация чрезвычайно высока. Adaboost на протяжении многих лет помогала в разработке технологий обнаружения лиц, рук и людей. В этом блоге я попытался помочь вам развить интуицию о классификаторе и о том, как его создать с нуля.
AdaBoost создает глобальную и оптимальную комбинацию слабых классификаторов на основе выборочного повторного взвешивания.
Метод ансамбля
Чтобы понять, как работает Adaboost, давайте сначала разберемся, что подразумевается под ансамблевыми методами. В этом методе сначала мы разделяем предоставленные нам данные на дочерние наборы данных, а затем наборы данных передаются в различные базовые модели (например, SVM, логистическая регрессия), а затем результат прогнозируется путем агрегирования результатов, предсказанных всеми этими базами.
Были введены методы ансамбля для преобразования модели Низкая смещенная высокая дисперсия в модель Низкая смещенная модель низкой дисперсии.
Смещение - это разница между средним предсказанием нашей модели и правильным значением, которое мы пытаемся предсказать.
Дисперсия - это изменчивость прогноза модели для данной точки данных или значения, которое говорит нам о разбросе наших данных.
Модель с низким смещением с высокой дисперсией - это модель, которая хорошо работает с данными обучения (поэтому с низким смещением), но как только некоторые данные предоставляются за пределами данных обучения, модель становится ошибочной (поэтому высокая дисперсия). Было обнаружено, что всякий раз, когда к данным применяется одна модель машинного обучения (например, SVM, случайный лес), существует только одна модель, которая изучает весь тренд данных, поэтому, естественно, модель очень хорошо идентифицирует обучающие данные. но всякий раз, когда в данных появляются новые тенденции, модель не может работать. Но когда мы используем метод ансамбля, несколько моделей изучают данные. В результате существуют разные модели для изучения различных тенденций в данных. Таким образом, в отличие от модели single ml, ансамбль изучает данные, а не запоминает их, и развивает интуицию. Поэтому, когда появляются новые точки данных, они используют интуицию, выработанную алгоритмом, для прогнозирования данных.
Методы ансамбля: упаковка и усиление
1. Пакетирование (сокращение от Bootstrap aggregation) - это метод ансамбля, при котором точки данных собираются путем случайной выборки предоставленных данных для формирования дочерних наборов данных, которые будут загружены в модели машинного обучения итеративным способом, формируя новые точки данных для следующей итерации из предыдущая модель, наугад. В Boosting точки данных формируются случайным образом и подаются в модели ML итеративным способом для работы над прогнозами, а затем, в зависимости от точности прогнозов, формируется взвешенная повторная выборка данных для подачи в модель ML для следующей итерации.
2. В пакете базовые модели, которые создаются, не зависят друг от друга, и окончательный прогноз выполняется путем вычисления агрегирования каждого из прогнозируемых значений базовыми моделями. Но при повышении базовые модели зависят друг от друга, так что модель создается с учетом ошибки, допущенной предыдущей, так что ошибка обучения уменьшается постепенно.
3. В Bagging конечный результат прогнозируется путем нахождения совокупности прогнозов, сделанных каждой базовой моделью, так что каждая базовая модель имеет равное количество голосов. В режиме Boosting окончательный прогноз делается взвешенной совокупностью прогнозов, сделанных каждой базовой моделью, что указывает на то, что базовые модели не имеют равного права голоса в окончательном прогнозе. Модель с большей точностью будет иметь большее мнение, чем модель с низкой точностью.
Пример упаковки: случайный лес
Пример повышения: Adaboost, Gradient Boost, Xg Boost
AdaBoost
Как я уже упоминал ранее, AdaBoost (расшифровывается как Adaptive Boosting) - это ансамблевой процесс, обычно используемый для задач классификации. Как и методы повышения, он дает нам окончательный прогноз, вводя данные в базовые модели, а затем вычисляя средневзвешенное значение прогнозов, чтобы получить окончательный результат.
У Adaboost есть три основных свойства:
- Базовые модели алгоритма - это слабые ученики, известные как Decision Stump.
- Не все базовые модели имеют равное право голоса в окончательном прогнозе. Приоритет, отданный модели, зависит от присвоенного ей веса.
- Базовые модели зависят друг от друга. Одна базовая модель создается в зависимости от ошибок предыдущей модели.
Решение Пень
Базовые модели или слабые ученики в случае Adaboost известны как пень принятия решения. Как и Random Forest, Adaboost можно назвать лесом пней. Мы применяем жадный алгоритм поиска для каждой предоставляемой нам функции, находим лучшую функцию разделения и ее пороговое значение, а затем разделяем все данные на основе этого. Затем эти данные разделения используются для прогнозов. Другими словами, мы создаем дерево решений с одним узлом.
Таким образом, пень принятия решения является слабым учеником, а это означает, что независимо от того, каково распределение по обучающим данным, он всегда будет лучше, чем случай, когда он попытается пометить данные. Лучше случайности означает, что у нас всегда будет коэффициент ошибок меньше 1/2.
Эти пни решения являются моделями с высокой степенью предвзятости и высокой дисперсией, поскольку они слабо работают как с данными обучения, так и с данными тестирования (это совершенно очевидно, когда все данные классифицируются на основе одного признака). Но, комбинируя этапы принятия решения, мы приходим к модели с низким уровнем предвзятости и низкой дисперсией, которая хорошо работает как с данными обучения, так и с данными тестирования.
Но часто возникает вопрос, почему мы используем слабых учеников вместо сильных (полностью сформированное дерево решений). Ответ на это очень простой. Это исключает вероятность переобучения модели ансамбля. Если модель подходит больше, модель будет хорошо работать с данными обучения, а не с данными тестирования. Другими словами, использование пней для принятия решения в качестве базовой модели делает эту модель низко смещенной, а не сильно смещенной.
Давайте теперь создадим алгоритм AdaBoost с нуля.
Давайте посмотрим на математику, лежащую в основе базовых моделей
- альфа это функция потерь = вес, присвоенный всей модели
- h (x) - это классификатор Decision Stump, используемый в этом случае.
- T - количество базовых моделей, используемых в этом методе ансамбля. Количество базовых моделей, которые будут использоваться в AdaBoost, сильно зависит от предоставленных нам данных.
Таким образом, мы находим взвешенную сумму классификаторов, чтобы предсказать окончательный ответ или, лучше сказать, найти H (x).
Давайте посмотрим на пошаговый процесс, который здесь задействован:
Шаг 1. Сначала мы присваиваем одинаковый вес выборки каждой точке данных. Таким образом, мы применяем 1 / (количество выборок) ко всем точкам данных.
Шаг 2. Мы создаем пень для принятия решения и классифицируем все данные на основе порогового значения. Мы выбираем лучшую функцию с помощью жадного алгоритма поиска, а также находим порог и разбиваем все данные на основе этого. Мы определяем лучшую характеристику, вычисляя погрешность. Более того, мы используем слабых учеников, чтобы делать нам прогнозы.
Шаг 3. Находим вес всей модели. Другими словами, мы находим значение альфа. Экспериментальным путем было обнаружено, что с увеличением количества ошибок вес уменьшается. Построив график, мы получим
Теперь ошибка обнаружена
ε = (неверное толкование) / образцы = (неправильная классификация) / N
ε = Σ веса неправильно классифицированных образцов
Если ошибка ›0,5, мы должны просто перевернуть решение, и ошибка = 1-ошибка. (Как мы видели, в случае слабого ученика ошибка не может быть больше 0,5, так как слабый ученик всегда будет лучше, чем шанс. )
Теперь узнаем вес (альфа) или функцию потерь модели по формуле
Шаг 4. Теперь нам нужно обновить вес всех точек данных. Мы придаем большее значение тем точкам данных, которые были помечены неправильно, и увеличиваем их веса. Это сделано для того, чтобы штрафовать за ошибки больше, чем за правильные прогнозы. С другой стороны, меньшее значение придается тем точкам данных, которые были предсказаны правильно, и их веса уменьшаются в соответствии с формулой:
Положительный знак соответствует ошибочно предсказанным точкам данных, а отрицательный знак - правильно предсказанным точкам данных. Где омега (i) - это обновленный вес, а омега (i-1) - предыдущий вес.
Шаг 5. Мы нормализуем обновленные веса так, чтобы обновленные веса лежали в диапазоне от 0 до 1, и добавляем к единице по формуле:
w (новый) = w (i) / сумма всех весов
Нам просто нужно повторять шаги, упомянутые выше, итеративно для каждой базовой модели. Количество итераций или количество необходимых базовых моделей сильно зависит от предоставленных данных.
Se позволяет с нуля создать класс Adaboost с методами fit () и предсказать ().
Итак, мы создали наш собственный классификатор Adaboost с нуля. Итак, давайте протестируем модель.
Таким образом, мы в основном импортируем наш классификатор AdaBoost, создаем нашу функцию точности, импортируем тестовую группу поездов, подгоняем обученные данные в наш классификатор и получаем наши результаты.
Итак, теперь проверьте точность модели:
Accuracy: 0.9736842105263158
Мультиклассовый Adaboost
Если наш лейбл Multiclass, он работает аналогично двухклассному Adaboost с небольшими изменениями. Если мультиклассовая классификация включает k классов, тогда вместо того, чтобы быть единственной переменной между {-1,1}, y становится k-мерным вектором. Точно так же f (x) также выводит k-мерный вектор. Итак, в функции ошибки вместо выполнения
Возьмем скалярное произведение y и вектора f (x)
Затем мы пытаемся минимизировать эту новую функцию ошибок.
Вывод:
Алгоритм AdaBoost - обширная тема для обсуждения. Регулярно публикуются исследовательские работы для настройки и улучшения этого алгоритма. Но несбалансированность данных приводит к снижению точности классификации. Кроме того, обучение занимает много времени, и лучше всего сокращать количество баллов при каждом повторном выборе текущего классификатора. Но это один из наиболее часто используемых методов повышения, используемых в задачах классификации, и я попытался построить здесь простую интуицию.