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

Приступим!

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

Шум определяется как неустранимая ошибка, которую мы не можем исправить после определенного момента.

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

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

Теперь поговорим подробнее о концепции Ensemble.

Основная идея этого названия заключается в том, что группа слабых учеников собирается вместе, чтобы стать сильным учеником, чтобы повысить точность модели. . Основная причина низкой точности любой модели - это ошибки (шум, смещение, дисперсия), и методы ансамбля помогают уменьшить эти факторы. Чтобы очень просто объяснить основную идею, я хотел бы использовать один известный пример.

Представьте, что 4 слепца описывают слона в соответствии со своим слухом. Обычно у всех есть свое мнение, и мы получим лучшее объяснение, если объединим все описания вместе, а не возьмем одно из них, верно?

Это простейшее объяснение метода ансамблевого обучения.

Алгоритмы ансамблевого обучения делятся на 3 основные категории в зависимости от их использования:

Бэггинг - также известен как Bootstrap Aggregation. Вы спросите, откуда взялось это название? В этом методе случайная выборка данных в обучающем наборе выбирается с замещением-бутстрэппингом, и это просто означает, что отдельные точки данных могут быть выбраны несколько раз. Это также известно как параллельное обучение, потому что модели работают независимо, они не влияют друг на друга.

~ Если этот процесс выборки выполняется без замены, он называется Вставка. ~

Если вы столкнулись с проблемой переобучения (высокая дисперсия, низкая систематическая ошибка), это именно то, что вам нужно, упаковка устраняет дисперсию. Процедура упаковки основана на следующих этапах:

  • Изготовление подмножеств с заменой;
  • Применение модели к каждому подмножеству;
  • Прогнозы по каждой модели;
  • Агрегирование своих прогнозов, чтобы получить окончательный прогноз.

Здесь может возникнуть вопрос. Как агрегировать прогнозы? Как сделать окончательный прогноз?

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

  • Жесткое голосование - это простой тип голосования. Здесь мы выбираем повторяющееся предсказание, которое является статистическим режимом.
  • Мягкое голосование. Здесь мы имеем дело с вероятностями. Классификаторы могут предсказывать вероятности классов, поэтому все, что нам нужно сделать, это просто попросить Scikit-Learn предсказать класс с большей вероятностью.

~ Мягкое голосование часто обеспечивает более высокую производительность, чем жесткое голосование, потому что оно придает больший вес голосам с высокой степенью уверенности. В Python это легко сделать, заменив «голосование =« жесткий »на голосование =« мягкий »и наоборот. ~

Есть 2 алгоритма упаковки:

  • Мета-оценка пакетов - может использоваться как для классификации, так и для задач регрессии. Процедура такая же, как я упоминал выше, Scikit-Learn предлагает простой API, и все, что мы делаем, это просто устанавливаем параметры.
  • Случайный лес - расширение мета-оценщика пакетов. Основное отличие состоит в том, что случайный лес случайным образом выбирает набор функций для определения наилучшего разделения в каждом узле деревьев решений.

При упаковке некоторые экземпляры могут быть отобраны несколько раз для любого данного предиктора, а некоторые могут не быть отобраны вообще. Другими словами, 37% обучающего набора не выбираются, и это не те же 37% для всех предикторов. Это так называемые экземпляры вне сумки (oob). Поскольку предсказатель никогда их не видит во время обучения, мы могли бы использовать их для оценки модели. Мы могли бы легко сделать это, просто установив «oob_score = True» при использовании метода упаковки.

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

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

Есть несколько алгоритмов повышения:

  • AdaBoost
  • ГБМ
  • XGB
  • Легкий GBM
  • CatBoost

Но на сегодняшний день наиболее популярными являются AdaBoost и Gradient Boosting. Поговорим о них.

  • Adaboost - сокращение от Adaptive Boosting. Как мы упоминали выше, здесь каждый предиктор пытается исправить своего предшественника. Один из способов - придать больший вес неверно предсказанным наблюдениям. В результате новый предсказатель все больше и больше фокусируется на этих случаях. Можно сказать, что этот метод последовательного обучения имеет некоторое сходство с градиентным спуском. Но разница в том, что GD пытается минимизировать функцию стоимости, настраивая параметры одного предиктора, но AdaBoost помещает все предикторы в ансамбль, чтобы сделать его лучше. (Отметьте этот пост, чтобы получить простое объяснение GD)
  • Повышение градиента - также последовательно добавляет предикторы в ансамбль, и каждый пытается исправить своего предшественника. Но разница в том, что в то время как AdaBoost изменяет веса на каждой итерации, Gradient Boosting пытается подогнать новый предсказатель к остаточным ошибкам, сделанным предыдущим, а затем в конце делает предсказание для нового экземпляра, просто складывая предсказания все деревья.

Stacking - это сокращение от Stacked Generalization. На самом деле он сочетает в себе как Bagging и Boosting, так и широко используется, чем они. Идея проста: вместо того, чтобы использовать тривиальные функции в качестве голосования для агрегирования прогнозов, мы обучаем модель для выполнения этого процесса. Допустим, у нас есть 3 предсказателя, поэтому в конце у нас есть 3 разных предсказания. Итак, на этом этапе мы берем эти 3 прогноза в качестве входных данных и обучаем последний прогнозирующий элемент, который вызвал блендер или метаобучающий. В конце концов, блендер делает за нас окончательный прогноз в соответствии с предыдущими прогнозами. Другими словами, после обучения предполагается, что блендер возьмет выходные данные ансамбля и смешает их таким образом, чтобы максимизировать точность всей модели.

Я могу заказать следующие этапы процесса:

  • Разделение обучающей выборки на 2 части;
  • Обучение нескольких предикторов по первой части;
  • Тестируем их по второй части;
  • Обучение нового предиктора более высокого уровня с использованием этих прогнозов в качестве входных данных и правильных ответов в качестве выходных данных.

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

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

Надеюсь, статья помогла вам составить определенное мнение по этой теме. Спасибо за внимание!