Статьи

XGBoost: глубокое погружение в повышение


Каждый день мы слышим о прорывах в искусственном интеллекте.
Однако, вы задавались вопросом, с какими проблемами он сталкивается?

Проблемы возникают в случае крайне неструктурированных данных, таких как секвенирование ДНК, транзакции по кредитным картам и даже кибербезопасность, которая является основой защиты нашего присутствия в Интернете от мошенников. Эта мысль заставляет вас жаждать узнать больше о науке и обосновании этих систем? Не волнуйтесь! Мы вас прикрыли. В эпоху кибер-технологий машинное обучение (ML) предоставило нам решения этих проблем с внедрением Gradient Boosting Machines (GBM). У нас есть достаточное количество алгоритмов на выбор для повышения градиента для наших обучающих данных, но, тем не менее, мы сталкиваемся с различными проблемами, такими как низкая точность, большие потери, большая разница в результате. 

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

XGBoost Взгляд!

eXtreme Gradient Boosting (XGBoost) — это масштабируемая и улучшенная версия алгоритма повышения градиента (терминологическое оповещение), предназначенная для повышения эффективности, скорости вычислений и производительности модели. Это библиотека с открытым исходным кодом и часть сообщества распределенного машинного обучения. XGBoost представляет собой идеальное сочетание программных и аппаратных возможностей, разработанных для повышения точности существующих методов повышения мощности в кратчайшие сроки. Вот краткий обзор объективного сравнения XGBoost с другими алгоритмами повышения градиента, обученного в случайном лесу с 500 деревьями, выполненного Сцилардом Пафкой .



Тест производительности XGBoost (источник)

Тест производительности XGBoost

Быстрое воспоминание о повышении

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

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

ПРАВИЛА:

  • Нет информации об учетной записи и фото профиля → Bot
  • Имя пользователя — бред → Бот
  • Чириканье на нескольких языках → Бот
  • Имеет достаточную активность и профиль → Человек
  • Огромное количество твитов в день → Бот
  • Другие аккаунты связаны → Человек

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

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

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

  • Дерево как базовый ученик
  • Линейная базовая обучаемость

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

Хотите узнать больше об учениках? Будьте уверены, в следующем разделе мы продемонстрируем, как использовать базовых учащихся для обучения моделям XGBoost.

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

Обучение ансамблю

Ансамблевое обучение — это процесс, в котором решения из нескольких моделей машинного обучения объединяются для уменьшения ошибок и улучшения прогнозирования по сравнению с одной моделью ML. Затем метод максимального голосования используется для агрегированных решений (или прогнозов на языке машинного обучения) для получения окончательного прогноза. Озадаченный?

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

Это изображение показывает четкое различие модели ML по отношению к Ensemble Learner:

Прогноз одиночной модели против ученика ансамбля

Типы обучения ансамблю:

Методы обучения ансамблю могут быть выполнены двумя способами:

  • Bagging (параллельный ансамбль)
  • Boosting (последовательный ансамбль)

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

Работа алгоритма повышения:

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

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

  F(i) is current model, F(i-1) is previous model and f(i) represents weak 

model  

Внутренняя работа алгоритма повышения

Чувствуете себя готовым? Взгляните на еще два алгоритма (CART и Gradient Boosting), чтобы понять механику XGBoost, прежде чем углубляться в тему.

Деревья классификации и регрессии (CART):

Дерево решений — это контролируемый алгоритм машинного обучения, используемый для прогнозного моделирования зависимой переменной (цели) на основе ввода нескольких независимых переменных. У этого есть древовидная структура с корнем наверху. CART, которая обозначает Деревья классификации и регрессии, используется как общий термин для обозначения следующих типов деревьев решений:

Деревья классификации: где целевая переменная является фиксированной или категориальной, этот алгоритм используется для определения класса / категории, в которую цель, скорее всего, попадет.

Деревья регрессии: где целевая переменная является непрерывной, а дерево / алгоритм используется для прогнозирования ее значения, например, для прогнозирования погоды.

Повышение градиента:

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

Основное различие между бустингом и градиентным бустингом заключается в том, как оба алгоритма обновляют модель (слабые учащиеся) из-за неправильных предсказаний. Повышение градиента регулирует вес с помощью градиента (направление в функции потерь) с использованием алгоритма, называемого Gradient Descent , который итеративно оптимизирует потерю модели путем обновления весов. Потеря обычно означает разницу между прогнозируемым значением и фактическим значением. Для алгоритмов регрессии мы используем потерю MSE (средняя квадратическая ошибка), в то время как для задач классификации мы используем логарифмическую потерю.

w represents the weight vector, η is the learning rate

Процесс повышения градиента:

Технологический процесс повышения градиента

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

Аддитивное моделирование в математике — это разбиение функции на сложение N подфункций. В статистическом смысле это можно рассматривать как регрессионную модель, в которой отклик y представляет собой арифметическую сумму отдельных эффектов переменных-предикторов x.

XGBOOST в действии!

Что делает XGBoost идеальным алгоритмом для победы в соревнованиях по машинному обучению и Kaggle?

Особенности XGBoost

Разве не интересно увидеть один инструмент для решения всех наших проблем с повышением! Вот особенности с деталями и как они включены в XGBoost, чтобы сделать его надежным.


Улучшения алгоритма:

  1. Обрезка деревьевОбрезка — это метод машинного обучения, позволяющий уменьшить размер деревьев регрессии путем замены узлов, которые не способствуют улучшению классификации на листьях. Идея обрезки дерева регрессии состоит в том, чтобы предотвратить переобучение данных обучения. Самый эффективный метод сокращения — Сложность затрат или Слабое сокращение ссылок, который внутренне использует среднеквадратичную ошибку, k-кратную перекрестную проверку и скорость обучения. XGBoost создает узлы (также называемые расщеплениями) с указанным значением max_depth и начинает отсечение назад, пока потеря не окажется ниже порогового значения. Рассмотрим разделение с потерями -3 и последующим узлом с потерями +7, XGBoost не удалит разделение, просто взглянув на одну из отрицательных потерь. Он вычислит общий убыток (-3 + 7 = +4) и, если он окажется положительным, сохранит оба.
  2. Sparsity Aware Split Finding (Распознавание с разбивкой по разреженным частям) — довольно часто встречающиеся данные имеют разреженность (множество пропущенных или пустых значений) или становятся разреженными после выполнения инженерии данных (кодирование функций). Чтобы быть в курсе разреженности в данных, направление по умолчанию назначает его каждому дереву. XGBoost обрабатывает недостающие данные, назначая их в направлении по умолчанию и находя наилучшее значение вменения, чтобы минимизировать потери при обучении. Оптимизация здесь заключается в посещении только пропущенных значений, которые заставляют алгоритм работать в 50 раз быстрее, чем простой метод.

Улучшения системы:

  1. Распараллеливание — древовидное обучение требует данных в отсортированном виде. Чтобы сократить расходы на сортировку, данные делятся на сжатые блоки (каждый столбец с соответствующим значением объекта). XGBoost сортирует каждый блок параллельно, используя все доступные ядра / потоки процессора. Эта оптимизация полезна, так как большое количество узлов часто создается в дереве. Короче говоря, XGBoost распараллеливает последовательный процесс генерации деревьев.
  2. Cache Aware — Оптимизируя кэш-память, мы храним статистику градиента (направление и значение) для каждого разделенного узла во внутреннем буфере каждого потока и выполняем накопление в виде мини-пакета. Это помогает сократить время, затрачиваемое на немедленные операции чтения / записи, а также предотвратить потерю кэша . Осведомленность о кеше достигается путем выбора оптимального размера блока (обычно 2 ^ ¹⁶).

Гибкость в XGBoost:

  1. Настроенная целевая функция — целевая функция предназначена для максимизации или минимизации чего-либо. В ML мы стараемся минимизировать целевую функцию, которая является комбинацией функции потерь и члена регуляризации.

L(Φ) is objective function 


Оптимизация функции потерь поощряет прогнозные модели, тогда как оптимизация регуляризации приводит к меньшей дисперсии и делает прогнозирование стабильным.
Различные целевые функции, доступные в XGBoost:


  • рег: линейный для регрессии

  • reg: логистика и бинарный: логистика для бинарной классификации

  • multi: softmax и multi: softprob для мультиклассовой классификации

2. Индивидуальная метрика оценки — это метрика, используемая для контроля точности модели на данных валидации.

  • rmse — среднеквадратическая ошибка (регрессия)
  • mae — средняя абсолютная ошибка (регрессия)
  • ошибка — ошибка двоичной классификации (классификация)
  • logloss — отрицательное логарифмическое правдоподобие (классификация)
  • auc — площадь под кривой (классификация)

Перекрестная проверка:

  1. Встроенная перекрестная проверка — перекрестная проверка — это статистический метод оценки моделей машинного обучения по невидимым данным. Это удобно, когда набор данных ограничен, и предотвращает переоснащение, не беря независимую выборку (удержание) из обучающих данных для проверки. Сокращая объем обучающих данных, мы идем на компромисс с функциями и шаблонами, скрытыми в данных, которые могут дополнительно вызвать ошибки в нашей модели. Это похоже на функциональность cross_val_score, предоставляемую библиотекой sklearn.

XGBoost использует встроенную функцию перекрестной проверки cv ():

xgb.cv() 

Хотите промочить ноги? (Это время кодирования)


питон