XGBoost

Pause

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].

Примечания

  1. ↑ GitHub project webpage. GitHub (июнь 2022). Дата обращения: 5 апреля 2016. Архивировано 1 апреля 2021 года.
  2. ↑ Python Package Index PYPI: xgboost. Дата обращения: 1 августа 2016. Архивировано 23 августа 2017 года.
  3. ↑ CRAN package xgboost. Дата обращения: 1 августа 2016. Архивировано 26 октября 2018 года.
  4. ↑ Julia package listing xgboost. Дата обращения: 1 августа 2016. Архивировано 18 августа 2016 года.
  5. ↑ CPAN module AI::XGBoost. Дата обращения: 9 февраля 2020. Архивировано 28 марта 2020 года.
  6. ↑ Installing XGBoost for Anaconda in Windows. IBM. Дата обращения: 1 августа 2016. Архивировано 8 мая 2018 года.
  7. ↑ Installing XGBoost on Mac OSX. IBM. Дата обращения: 1 августа 2016. Архивировано 8 мая 2018 года.
  8. ↑ Dask Homepage. Дата обращения: 15 июля 2021. Архивировано 14 сентября 2022 года.
  9. ↑ Distributed XGBoost with Dask — xgboost 1.5.0-dev documentation. xgboost.readthedocs.io. Дата обращения: 15 июля 2021. Архивировано 4 июня 2022 года.
  10. ↑ 1 2 XGBoost - ML winning solutions (incomplete list). GitHub. Дата обращения: 1 августа 2016. Архивировано 24 августа 2017 года.
  11. ↑ Story and Lessons behind the evolution of XGBoost. Дата обращения: 1 августа 2016. Архивировано 7 августа 2016 года.
  12. ↑ Rabit - Reliable Allreduce and Broadcast Interface. GitHub. Дата обращения: 1 августа 2016. Архивировано 11 июня 2018 года.
  13. ↑ XGBoost4J. Дата обращения: 1 августа 2016. Архивировано 8 мая 2018 года.
  14. ↑ XGBoost on FPGAs. GitHub. Дата обращения: 1 августа 2019. Архивировано 13 сентября 2020 года.
  15. ↑ 1 2 Chen, Tianqi; Guestrin, Carlos (2016). “XGBoost: A Scalable Tree Boosting System”. In Krishnapuram, Balaji; Shah, Mohak; Smola, Alexander J.; Aggarwal, Charu C.; Shen, Dou; Rastogi, Rajeev. Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, San Francisco, CA, USA, August 13-17, 2016. ACM. pp. 785—794. arXiv:1603.02754. DOI:10.1145/2939672.2939785. ISBN 9781450342322. S2CID 4650265.
  16. ↑ Gandhi, Rohith Gradient Boosting and XGBoost (англ.). Medium (24 мая 2019). Дата обращения: 4 января 2020. Архивировано 28 марта 2020 года.
  17. ↑ Tree Boosting With XGBoost – Why Does XGBoost Win "Every" Machine Learning Competition? (амер. англ.). Synced (22 октября 2017). Дата обращения: 4 января 2020. Архивировано 28 марта 2020 года.
  18. ↑ John Chambers Award Previous Winners. Дата обращения: 1 августа 2016. Архивировано 31 июля 2017 года.
  19. ↑ HEP meets ML Award. Дата обращения: 1 августа 2016. Архивировано 8 мая 2018 года.
Pause