XGBoost

XGBoost[1] (eXtreme Gradient Boosting) — свободная программная библиотека, предоставляющая регуляризирующую платформу градиентного бустинга для C++, Java, Python[2], R[3], Julia[4], Perl[5] и Scala.

Работает на Linux, Microsoft Windows[6] и macOS[7]. Согласно описанию проекта, его цель — предоставить «масштабируемую, переносимую и распределённую библиотеку градиентного бустинга (GBM, GBRT, GBDT)». XGBoost может работать как на одном компьютере, так и в распределённых вычислительных средах Apache Hadoop, Apache Spark, Apache Flink и Dask[8][9].

XGBoost приобрёл широкую популярность и внимание в середине 2010-х годов как алгоритм, выбранный многими командами-победителями соревнований по машинному обучению[10].

Общие сведения
XGBoost
Тип Машинное обучение
Разработчик The XGBoost Contributors
Написана на C++
Операционные системы Linux, macOS, Microsoft Windows
Первый выпуск 27 марта 2014
Последняя версия edit
Репозиторий github.com/dmlc/xgboost
Лицензия Apache License 2.0
Сайт xgboost.ai

История

XGBoost изначально был исследовательским проектом Тяньци Чэна[11] в составе группы Distributed (Deep) Machine Learning Community (DMLC) при Вашингтонском университете. Изначально проект представлял собой терминальное приложение, которое можно было настраивать с помощью конфигурационного файла libsvm. Библиотека стала широко известна в кругах соревнований по машинному обучению после её использования в победившем решении Higgs Machine Learning Challenge. Вскоре после этого были созданы пакеты для Python и R, а сейчас XGBoost имеет реализации для Java, Scala, Julia, Perl и других языков. Это сделало библиотеку доступной для большего числа разработчиков и способствовало её популярности в сообществе Kaggle, где она использовалась во множестве соревнований[10].

Вскоре XGBoost был интегрирован с рядом других пакетов, что упростило его использование в соответствующих сообществах. Сейчас он интегрирован с scikit-learn для пользователей Python и с пакетом caret для пользователей R. Также возможна интеграция с фреймворками потоковой обработки данных, такими как Apache Spark, Apache Hadoop и Apache Flink, с использованием абстракций Rabit[12] и XGBoost4J[13]. XGBoost также доступен на OpenCL для FPGA[14]. Эффективная масштабируемая реализация XGBoost была опубликована Тяньци Чэном и Карлосом Гестрином[15]. Последняя версия вышла 9.01.2026 и имеет номер 3.2.0.

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

Особенности

Ключевые особенности XGBoost, отличающие его от других алгоритмов градиентного бустинга[15][16][17]:

  • Умное штрафование деревьев;
  • Пропорциональное уменьшение листовых узлов;
  • Ньютоновский бустинг;
  • Дополнительный параметр рандомизации;
  • Реализация на одиночных и распределённых системах, а также out-of-core вычисления;
  • Автоматический отбор признаков;
  • Теоретически обоснованный взвешенный квантильный скетч для эффективных вычислений;
  • Параллельное построение структуры дерева с учётом разреженности;
  • Эффективная кэшируемая блочная структура для обучения деревьев решений.

Алгоритм

XGBoost работает как метод Ньютона—Рафсона в функциональном пространстве, в отличие от градиентного бустинга, который использует градиентный спуск в функциональном пространстве; во втором порядке используется аппроксимация Тейлора в функции потерь для связи с методом Ньютона—Рафсона.

Общий нерегуляризованный алгоритм XGBoost:

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

Алгоритм:

  • Инициализация модели константой:
Обратите внимание, что это инициализация модели, поэтому мы задаём константу для всех входов. Даже если на следующих итерациях мы используем оптимизацию для поиска новых функций, на шаге 0 мы должны найти значение, одинаковое для всех входов, минимизирующее функцию потерь.
  1. Для m = 1 до M:
    1. Вычислить «градиенты» и «гессианы»:
    2. Обучить базовую модель (или слабую модель, например, дерево) на обучающей выборке путём решения следующей задачи оптимизации:
    3. Обновить модель:
  2. Выход

Награды

  • Премия Джона Чеймберса (2016)[18].
  • High Energy Physics meets Machine Learning award (HEP meets ML) (2016)[19].

Примечания