Нежное введение в бэггинг, бустинг и несколько общих учеников ансамбля
Что я буду освещать?
Я попытаюсь охватить концепции голосования, бэггинга, бустинга и, возможно, концептуально объяснить несколько алгоритмов ансамбля. Я считаю, что есть много ресурсов, которые уже показывают вам, как создавать эти вещи с помощью Sklearn или других библиотек, но концепция, лежащая в их основе, гораздо интереснее. Просто прочтите книгу, и держу пари, вы еще больше оцените идею, лежащую в основе этих алгоритмов.
Введение
Идея высокого уровня ансамблевого обучения заключается в том, что ответы множества людей на сложную или запутанную проблему и объединение их ответов, как правило, лучше, чем ответ одного умного человека на проблему. Именно это и происходит в ансамблевом обучении. У нас есть множество предикторов, пытающихся предсказать решение или недостающую формулу для набора обучающих данных, но по отдельности они не так хороши. Но если мы объединим их результаты, мы сможем предсказать отсутствующую формулу намного лучше, чем любой отдельный предиктор. Набор предикторов в этом случае называется ансамблем, а метод называется ансамблевым обучением и ансамблевым алгоритмом. это метод ансамбля.
Обычно ансамблевые методы используются ближе к концу проекта, когда мы уже построили несколько хороших предикторов. Это помогает нам дать хорошее представление о том, как мы можем улучшить объединение их для дальнейшего улучшения.
Классификаторы голосования
Я сказал вам, что обычно мы объединяем результаты всех предикторов (ансамбля), но как мы это делаем? Библиотеки обычно имеют два основных варианта: жесткое голосование и мягкое голосование. (Это не означает, что мы не можем придумать другие способы агрегирования результатов, но просто они очень распространены, поэтому полезно их знать).
Жесткое голосование
Скажем, теперь у нас есть различные классификаторы x, y и z. Очень простой способ создать еще лучший классификатор в большинстве случаев — просто провести «жесткое голосование».
Это означает, что мы просто объединяем прогнозы каждого из классификаторов x, y и z, набирая большинство голосов. Это называется «жесткий классификатор голосования».
В реальной жизни эти классификаторы работают на удивление хорошо, даже когда наши базовые классификаторы являются «слабыми учениками», то есть учениками, которые лишь немного лучше, чем случайное угадывание.
Почему это? Я хотел бы привести аналогию со смещенной игральной костью. Скажем, у нас есть смещенная игральная кость, которая показывает сторону 3 с вероятностью более 1/6. Если мы подбросим эту игральную кость тысячу или, может быть, десять тысяч раз, мы на дюйм все ближе и ближе к получению истинной вероятности необъективной игры в кости. Точно так же, если вы создаете ансамбль из тысячи слабых учеников, и они независимы друг от друга и лишь немного лучше, чем случайное угадывание (возможно, в 51% случаев), тогда, объединив сотни этих предикторов, мы могли бы даже получить классификатор, который точен примерно в 75% случаев.
Мягкое голосование
Теперь допустим, что у нас есть вероятности для каждого класса, предсказанного классификаторами, тогда мы можем предсказать класс с наивысшей вероятностью класса, усредненной по всем отдельным классификаторам. Это называется «Мягкое голосование». Обычно оно дает лучшие результаты, чем «Жесткое голосование», потому что придает больший вес уверенным голосам.
Бэгинг
Итак, я сказал вам, что если у нас есть независимые слабые ученики, мы можем построить лучший предиктор, агрегируя эти данные. Мы видели один из способов сделать это выше. Выберите разные модели, а затем объедините их результаты, используя жесткое или мягкое голосование.
Есть и другие способы построения классификаторов. Как насчет обучения одного и того же алгоритма на разных подмножествах данных?? Когда мы делаем это с заменой, это называется Bagging (сокращение от bootstrap aggregation), а когда мы делаем это без замены, это называется Pasting. Как только все предикторы обучены, мы можем просто предсказать конечный результат, используя статистический режим (для классификаторов) или статистическое среднее (для регрессоров). Как вы можете видеть, каждый отдельный предиктор имеет более высокое смещение (делает больше предположений о данных для прогнозирования вывода, то есть более простой модели), чем если бы он был обучен на исходном наборе обучающих данных, но агрегация уменьшает как систематическую ошибку, так и дисперсию (насколько хорошо она обобщается на новый набор данных).
Как видите, все предикторы можно обучать параллельно на разных ядрах ЦП или даже на разных серверах, если хотите. Вот почему упаковка и вставка являются одними из немногих популярных методов, которые действительно хорошо масштабируются.
Случайные леса
Случайные леса работают по принципу мешков. У них есть куча слабых учеников, обычно деревья решений, по которым они агрегируют результаты. В этих деревьях решений вы можете настроить глубину дерева (чтобы установить, насколько сложным является каждый отдельный учащийся), хотите ли вы использовать начальную загрузку (случайная выборка с заменой) или вставку, как вы хотите агрегировать результаты (также известные как жесткое голосование или мягкое голосование ), количество ядер ЦП, на которых вы хотите его запустить, количество слабых предикторов, которые вы хотите, и т. д.
Теперь, когда у вас есть общее представление о мешках, давайте немного подробнее обсудим, что еще мы можем сделать с мешками, чтобы сделать их по-настоящему крутыми. Поскольку мы случайным образом выбираем обучающие примеры из обучающих данных, непреднамеренно некоторые примеры могут выбираться чаще, чем другие. Я собираюсь опустить здесь математику, но на самом деле примерно по мере роста размера выборки у нас примерно 63% данных, которые выбираются в среднем для каждого предиктора. Остальные 37 % образцов, которые не отбираются столько раз, сколько среднее количество образцов, называются «экземплярами Out of Bag (OOB)».
Поскольку несколько предикторов никогда не видели эти экземпляры OOB, мы фактически можем использовать эти экземпляры в качестве тестовых экземпляров вместо отдельного набора проверки или обучающего набора. Это функция, предоставляемая многими библиотеками, и даже если они этого не знают, теперь вы знаете, что на самом деле можете это сделать.
Расширяя наши мысли о методах Random Forest/Bagging, вы можете задаться вопросом, почему мы выбираем только обучающие примеры, а не сами функции. Если у нас будет достаточно больших данных для обучения, как вы думаете, мы можем попробовать функции? Найдите минутку и подумайте об этом!
Ответ Абсолютно!! Вы можете просто взять все обучающие примеры, отобрать функции и построить на их основе свою модель (так называемая Случайная установка исправлений) или просто отобрать как функции, так и обучающие примеры (так называемые Случайные подпространства ). Опять же, большинство библиотек дают вам свободу включать их, используя различные параметры, но если они этого не делают, вы знаете, что можете это сделать, и в этом красота ансамблевых моделей. Поскольку это только введение, позвольте мне не углубляться в это. Может быть, это требует отдельного поста? Давайте перейдем к бустингу сейчас
Повышение
Повышение (первоначально называвшееся «усиление гипотез») относится к другой форме ансамблевого обучения.
Общая идея бустинга заключается в том, что мы обучаем модели последовательно. Мы просим модель сделать прогноз на основе обучающих данных, а затем на основе возвращенных значений мы видим, что было классифицировано неправильно, а затем удваиваем эти обучающие экземпляры (придаем им больший вес) и обучаем на них следующую модель и так далее.
Таким образом, каждая модель пытается исправить ошибки своих предшественников, как и правительства многих стран. Несколько популярных алгоритмов, которые следуют Boosting, — это AdaBoost или Gradient Boost.
ADA Boost (адаптивное повышение)
Ada Boost делает именно то, что упомянуто выше. Он обучает слабого ученика (обычно это дерево решений), видит, какие примеры были предсказаны неправильно из-за недостаточной подгонки (поскольку модель слабая), увеличивает веса неправильно классифицированного примера, а затем строит новое дерево решений с обновленными весами, и это идет на. Алгоритм останавливается, когда достигается желаемое количество предикторов или когда у нас есть идеально подходящая модель (в большинстве случаев это было бы переобучением).
Это более или менее похоже на градиентный спуск, о котором вы, ребята, могли знать, но вместо точной настройки параметров одной модели он настраивает ее на разных предикторах, чтобы получить наилучший результат.
Повышение градиента
Это еще один алгоритм повышения. Он почти очень похож на усиление ADA в том смысле, что он строит предыдущий предиктор, а затем пытается его улучшить. Но вместо того, чтобы увеличивать веса неправильно классифицированных или неправильных примеров, он пытается подогнать новый предиктор к остаточным ошибкам предыдущего предиктора. Позвольте мне привести вам пример с помощью этой диаграммы ниже.
Изначально у нас есть слабый ученик, который предсказывает значения, как показано на рисунке ниже. Теперь мы пытаемся выяснить, «насколько неверны» наши прогнозы, и пытаемся подогнать к ним новую модель, а затем пытаемся выяснить, «насколько невернее» был наш предыдущий прогноз, и продолжаем повторять это. Рисунок ниже должен дать вам лучшее представление о том, на что я намекаю.
Заключение
Надеюсь, теперь вы лучше понимаете, что такое бустинг и бэггинг и как они используются в обучении ансамблем. Нам предстоит узнать гораздо больше об этих интересных концепциях, таких как их подводные камни, как выбирать слабых учеников, каких слабых учеников мы выбираем, почему большинство из них выбирают деревья решений, как мы получаем важность функции из случайных лесов и т. д. , Я постараюсь осветить их в серии постов, так что держите меня в курсе того, что вы хотели бы узнать о машинном обучении.