Интервью о машинном обучении — часть 8

Погрузитесь в ансамблевое обучение с помощью AdaBoost с нуля, используя Python

В этой статье моей серии «Ace your Machine Learning Interview» я продолжаю говорить об обучении ансамблем и, в частности, сосредоточусь на алгоритмах повышения с особой ссылкой на AdaBoost. Я надеюсь, что эта серия, в которой я рассматриваю основы машинного обучения, будет вам полезна перед вашим следующим собеседованием!😁

Если вам интересны предыдущие статьи из этой серии, я оставляю ссылки здесь:

  1. Собеседование о машинном обучении — часть 1: погружение в линейную, лассо- и гребенчатую регрессию и их предположения
  2. Собеседование по машинному обучению — часть 2: погружение в логистическую регрессию для решения задач классификации с использованием Python
  3. Собеседование о машинном обучении — Часть 3: Погружение в наивный байесовский классификатор с использованием Python
  4. Собеседование по машинному обучению — часть 4: знакомство с машинами опорных векторов с использованием Python
  5. Собеседование по машинному обучению — Часть 5: Знакомство с векторными машинами ядра с использованием Python
  6. Собеседование по машинному обучению — часть 6: погружение в деревья решений с помощью Python
  7. Собеседование по машинному обучению — часть 7: погружение в ансамблевое обучение с классификаторами жесткого голосования с использованием Python

Введение

В прошлой статье мы говорили в общих чертах о том, что такое Ensemble Learning, и видели и реализовывали простые методы Ensmble, основанные на голосовании большинством.

Сегодня мы более подробно поговорим о методе Ensemble под названием Boosting, сделав специальную ссылку на Adaptive Boosting или AdaBoost. Возможно, вы слышали об этом алгоритме раньше, например, он часто используется для победы в соревнованиях Kaggle.

Основная идея AdaBoost была впервые изложена в статье «Сила слабой обучаемости Роберта Э. Шапира»».

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

Оригинальная идея AdaBoost

Как изначально задумывалось, Boosting изначально был основан на уже знакомой нам технике под названием Pasting.

Поэтому было реализовано несколько слабых учеников, и каждый слабый ученик обучался на подмножестве данных набора поездов без замены. Слабые ученики, которых мы будем называть wl_1, wl_2, …, wl_n, обучались последовательно, и каждый wl_i+1 обучался на случайном подмножестве набор поездов, к которому были добавлены 50 % ошибочно классифицированных точек данных из wl_i. Таким образом, неправильно классифицированным точкам данных придавался больший вес.

В конце концов, они объединят всех слабых учащихся, отстающих в функции голосования большинства.

АдаБуст

Основная идея осталась прежней, но теперь алгоритм AdaBoost немного отличается. Во-первых, вставка больше не используется, но каждый слабый ученик обучается на всем доступном наборе поездов. Кроме того, используется другой механизм, чтобы придать большее значение баллам, неправильно классифицированным предыдущим слабым учеником. Слабые ученики wl_i+1 просто будут придавать большее значение неправильно классифицированным точкам wl_i и меньшее значение правильно классифицированным.

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

Давайте кодировать!

Итак, сначала мы инициализируем два массива y и y_hat, которые будут двоичными векторами +1 и -1. Они будут представлять истинные классы и предсказанные классы. После этого мы создаем список логических значений, где каждая запись сообщает нам, был ли прогноз верным или нет.

Теперь давайте инициализируем веса. Сначала веса будут одинаковыми для каждой точки данных, поскольку у нас 10, каждый вес будет равен 0,1.

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

Теперь мы готовы вычислить новые веса, а затем нормализовать их. Обратите внимание, что в зависимости от того, был ли прогноз правильным или неправильным, у нас есть две разные формулы для обновления весов.

Теперь у нас есть новые веса на втором шаге. Выможете выполнить m шагов, поместив все в цикл for.

К счастью, с различными библиотеками уже существуют гораздо более эффективные реализации. Итак, давайте посмотрим, как использовать AdaBoost с помощью sklearn!

Следующий набор данных Iris предоставлен sklearn под открытой лицензией, его можно найти здесь.

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

Теперь, написав всего несколько строк кода, мы можем создать AdaBoost на основе 500 простых деревьев решений, каждое из которых имеет max_depth = 1. И мы видим, что получаем гораздо лучшие результаты, чем просто используя деревья решений.

Вот и все! За несколько простых шагов вы можете создать свой алгоритм AdaBoost и получить свои прогнозы.

Последние мысли

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

Подписывайтесь на меня, чтобы не пропустить новые статьи из моей серии «Интервью о машинном обучении Ace you»!😁

Конец

Марчелло Полити

Linkedin, Twitter, CV