XGBoost — это программная библиотека с открытым исходным кодом, которая реализует оптимизированные алгоритмы машинного обучения с распределенным повышением градиента в рамках структуры Gradient Boosting.

Что такое XGBoost?

XGBoost, что означает Extreme Gradient Boosting, представляет собой масштабируемую, распределенную библиотеку машинного обучения с усиленным градиентом деревом решений (GBDT). Он обеспечивает параллельное повышение дерева и является ведущей библиотекой машинного обучения для задач регрессии, классификации и ранжирования.

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

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

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

Gradient Boosting Decision Trees (GBDT) — это алгоритм обучения ансамбля дерева решений, аналогичный случайному лесу, для классификации и регрессии. Алгоритмы ансамблевого обучения объединяют несколько алгоритмов машинного обучения для получения лучшей модели.

И случайный лес, и GBDT строят модель, состоящую из нескольких деревьев решений. Разница в том, как деревья построены и объединены.

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

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

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

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

Почему XGBoost?

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

Изначально были построены как Python, так и R реализации XGBoost. Благодаря своей популярности сегодня XGBoost имеет пакетные реализации для Java, Scala, Julia, Perl и других языков. Эти реализации открыли библиотеку XGBoost для еще большего числа разработчиков и повысили ее привлекательность в сообществе Kaggle.

XGBoost интегрирован с множеством других инструментов и пакетов, таких как scikit-learn для энтузиастов Python и caret для пользователей R. Кроме того, XGBoost интегрирован с платформами распределенной обработки, такими как Apache Spark и Dask.

В 2019 году XGBoost был назван одним из желанных лауреатов премии «Технология года» от InfoWorld.

Преимущества и атрибуты XGBoost

Список преимуществ и атрибутов XGBoost обширен и включает в себя следующее:

  • Большой и постоянно растущий список специалистов по данным по всему миру, которые активно участвуют в разработке XGBoost с открытым исходным кодом.
  • Использование в широком спектре приложений, включая решение задач регрессии, классификации, ранжирования и прогнозирования, определяемых пользователем.
  • Портативная библиотека, которая в настоящее время работает на платформах OS X, Windows и Linux.
  • Облачная интеграция с поддержкой AWS, Azure, кластеров Yarn и других экосистем
  • Активное производственное использование в нескольких организациях в различных вертикальных рыночных областях
  • Библиотека, созданная с нуля, чтобы быть эффективной, гибкой и переносимой.

XGBoost и специалисты по данным

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

Как XGBoost работает лучше с графическими процессорами

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

NVIDIA разработала NVIDIA RAPIDS™ — платформу для анализа данных и ускорения машинного обучения с открытым исходным кодом — или полностью выполняет сквозные обучающие конвейеры обработки данных на графических процессорах. Он использует примитивы NVIDIA CUDA® для низкоуровневой оптимизации вычислений, но предоставляет параллелизм графического процессора и высокую пропускную способность памяти через удобные интерфейсы Python.

Ориентируясь на общие задачи подготовки данных для аналитики и науки о данных, RAPIDS предлагает знакомый API DataFrame, который интегрируется с scikit-learn и различными алгоритмами машинного обучения без обычных затрат на сериализацию. Это позволяет ускорить сквозные конвейеры — от подготовки данных до машинного обучения и глубокого обучения. RAPIDS также включает поддержку развертывания с несколькими узлами и несколькими графическими процессорами, что позволяет значительно ускорить обработку и обучение на гораздо больших объемах наборов данных.

XGBoost+РАПИДС

Команда RAPIDS тесно сотрудничает с организацией Distributed Machine Learning Common (DMLC) XGBoost, и XGBoost теперь включает плавное ускорение графического процессора. Это значительно ускоряет обучение модели и повышает точность прогнозов.

XGBoost теперь основывается на стандартах интерфейса GoAI для обеспечения импорта данных с нулевым копированием из cuDF, cuPY, Numba, PyTorch и других. Dask API упрощает масштабирование до нескольких узлов или нескольких графических процессоров, а диспетчер памяти RAPIDS (RMM) интегрируется с XGBoost, поэтому вы можете совместно использовать единый высокоскоростной пул памяти.

XGBoost с ускорением на графическом процессоре

Алгоритм GPU-accelerated XGBoost использует быстрые параллельные операции суммирования префиксов для сканирования всех возможных разбиений, а также параллельную сортировку по основанию для перераспределения данных. Он строит дерево решений для данной итерации повышения, по одному уровню за раз, одновременно обрабатывая весь набор данных на графическом процессоре.

Сквозные конвейеры данных с GPU-ускорением и Spark + XGBoost

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

Первоначальный выпуск NVIDIA spark-xgboost позволял проводить обучение и анализ моделей машинного обучения XGBoost на узлах Apache Spark. Это помогло сделать его ведущим механизмом распределенного машинного обучения корпоративного класса.

GPU-Accelerated Spark XGBoost ускоряет предварительную обработку больших объемов данных, позволяет хранить большие объемы данных в памяти графического процессора и сокращает время обучения и настройки XGBoost.