Техники повышения

Как реализовать AdaBoost с Python?

Повышение эффективности алгоритмов машинного обучения - Часть 2

Мы продолжаем Часть 1 серии статей Повышение эффективности алгоритмов машинного обучения. Вы читали Часть 1? Он дает вам краткое введение в повышение и дает определения некоторых ключевых технических терминов, которые важны для понимания современного контента.

Сегодня мы познакомимся с одним из самых популярных алгоритмов повышения: AdaBoost (Adaptive Boosting). Больше внимания будет уделено реализации части алгоритма в следующих разделах.

  • Scikit-learn классы для AdaBoost
  • Обучите и оцените модель классификации AdaBoost на данных Wine
  • Сравните модель AdaBoost с пнем дерева решений
  • Важные гиперпараметры в AdaBoost
  • Измерьте влияние гиперпараметра n_estimators
  • Измерьте влияние гиперпараметра Learning_rate
  • Найдите оптимальные значения гиперпараметров с помощью поиска по сетке

Все образцы кода будут включены в виде файлов GitHub, чтобы вы могли легко с ними работать! В конце статьи вы сможете реализовать алгоритм AdaBoost на заданном наборе данных с оптимальными значениями гиперпараметров.

Давайте начнем!

Scikit-learn классы для AdaBoost

Реализация AdaBoost в Python выполняется двумя классами Scikit-learn: AdaBoostClassifier () для классификации (как двоичной, так и мультиклассовой) и AdaBoostRegressor () для регресс. Соглашения об импорте:

from sklearn.ensemble import AdaBoostClassifier
from sklearn.ensemble import AdaBoostRegressor

Создайте модель пня дерева решений

Остановив на раннем этапе рост дерева с помощью max_depth = 1, мы создадим пень для принятия решения на основе данных Wine. Это необходимо для сравнения пня принятия решения с моделью AdaBoost. Мы также используем эту модель пня в качестве базовой обучающей программы для AdaBoost.

Следующий код Python создает пень дерева решений для данных Wine и оценивает его производительность.

Производительность модели оставляет желать лучшего. Это неудивительно, поскольку мы строго регулировали рост дерева, задав max_depth = 1.

Создайте модель классификации AdaBoost

Теперь мы собираемся построить модель классификации AdaBoost на основе данных Wine.

Ох уж этот счет! Модель AdaBoost работает очень хорошо по сравнению с пнем дерева решений.

Важные гиперпараметры в AdaBoost

Ниже приведены наиболее важные гиперпараметры как в AdaBoostClassifier (), так и в AdaBoostRegressor ().

  • base_estimator: это базовый элемент обучения, используемый в алгоритмах AdaBoost. По умолчанию и наиболее часто учащийся - это пень дерева решений (дерево решений с max_depth = 1), как мы обсуждали ранее.
  • n_estimators: максимальное количество оценщиков (моделей) для последовательного обучения. По умолчанию - 50. Скоро мы измерим влияние этого гиперпараметра.
  • Learning_rate: определяет вес, применяемый к каждому оценщику в процессе повышения. По умолчанию - 1. Меньшие значения, такие как 0,05, 0,1, заставляют алгоритм тренироваться медленнее, но с высокими показателями производительности. Скоро мы измерим эффект этого гиперпараметра.

Измерьте эффект n_estimators

Мы вручную измерим эффект гиперпараметра n_estimators, изменив его значения от 2 до 100, и построим тестовые баллы, полученные с помощью модели AdaBoost.

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

Измерьте эффект Learning_rate

Мы вручную измерим эффект гиперпараметра Learning_rate, изменив его значения от 0,1 до 1, и построим тестовые баллы, полученные с помощью модели AdaBoost.

Наивысшая точность составляет 0,4, 0,5, 0,7 и 0,8. В приведенной выше модели мы использовали 0,5.

Оба измерения были выполнены вручную. Есть более простой способ найти оптимальные значения для n_estimators и learning_rate.

Найдите оптимальные значения гиперпараметров с помощью поиска по сетке

Здесь мы автоматически настраиваем (находим оптимальные значения) оба гиперпараметра одновременно с помощью Поиск по сетке. Напротив, на предыдущих шагах мы настраивали по одному гиперпараметру за раз.

Мы можем использовать эти значения, чтобы получить максимальную точность модели AdaBoost. Вот некоторые другие возможные комбинации, которые дают такую ​​же точность:

  • Learning_rate = 0,5, n_estimators = 50
  • Learning_rate = 0,8, n_estimators = 50
  • скорость обучения = 0,8, n_estimators = 100
  • Learning_rate = 0,4, n_estimators = 50

Резюме

Построение моделей AdaBoost на Python несложно. Все, что вам нужно сделать, это определить тип проблемы (регрессия / классификация), которую вы хотите решить, и выбрать подходящий класс AdaBoost, представленный в Scikit-learn. Однако процедура настройки гиперпараметров представляет собой настоящую проблему. Вам нужно сделать некоторые визуализации, провести параллельные вычисления для настройки гиперпараметров. Фактически вы создадите тысячи моделей. К счастью, мы можем автоматизировать процесс настройки, используя расширенные методы, о которых говорилось в этом посте.

На выходные данные модели может сильно повлиять случайное разделение данных. Вы можете получить разные оценки точности в зависимости от целого числа, указанного в random_state. Всегда рекомендуется указывать целое число, чтобы получить статические результаты при разных исполнениях.

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

В Части 3 мы обсудим Gradient Boosting, еще один популярный алгоритм повышения. Увидимся в следующей истории. Всем удачи!

Мои читатели могут подписаться на членство по следующей ссылке, чтобы получить полный доступ ко всем рассказам, которые я пишу, и я получу часть вашего членского взноса.



Большое спасибо за вашу постоянную поддержку!

Особая заслуга принадлежит Джону Прайсу на Unsplash, который предоставил мне красивую обложку для этого сообщения.

Рукшан Прамодитха
2021–10–22