Найти статью
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 мы должны найти значение, одинаковое для всех входов, минимизирующее функцию потерь.
- Для m = 1 до M:
- Вычислить «градиенты» и «гессианы»:
- Обучить базовую модель (или слабую модель, например, дерево) на обучающей выборке путём решения следующей задачи оптимизации:
- Обновить модель:
- Вычислить «градиенты» и «гессианы»:
- Выход
Награды
Примечания
- ↑ GitHub project webpage. GitHub (июнь 2022). Дата обращения: 5 апреля 2016. Архивировано 1 апреля 2021 года.
- ↑ Python Package Index PYPI: xgboost. Дата обращения: 1 августа 2016. Архивировано 23 августа 2017 года.
- ↑ CRAN package xgboost. Дата обращения: 1 августа 2016. Архивировано 26 октября 2018 года.
- ↑ Julia package listing xgboost. Дата обращения: 1 августа 2016. Архивировано 18 августа 2016 года.
- ↑ CPAN module AI::XGBoost. Дата обращения: 9 февраля 2020. Архивировано 28 марта 2020 года.
- ↑ Installing XGBoost for Anaconda in Windows. IBM. Дата обращения: 1 августа 2016. Архивировано 8 мая 2018 года.
- ↑ Installing XGBoost on Mac OSX. IBM. Дата обращения: 1 августа 2016. Архивировано 8 мая 2018 года.
- ↑ Dask Homepage. Дата обращения: 15 июля 2021. Архивировано 14 сентября 2022 года.
- ↑ Distributed XGBoost with Dask — xgboost 1.5.0-dev documentation. xgboost.readthedocs.io. Дата обращения: 15 июля 2021. Архивировано 4 июня 2022 года.
- ↑ 1 2 XGBoost - ML winning solutions (incomplete list). GitHub. Дата обращения: 1 августа 2016. Архивировано 24 августа 2017 года.
- ↑ Story and Lessons behind the evolution of XGBoost. Дата обращения: 1 августа 2016. Архивировано 7 августа 2016 года.
- ↑ Rabit - Reliable Allreduce and Broadcast Interface. GitHub. Дата обращения: 1 августа 2016. Архивировано 11 июня 2018 года.
- ↑ XGBoost4J. Дата обращения: 1 августа 2016. Архивировано 8 мая 2018 года.
- ↑ XGBoost on FPGAs. GitHub. Дата обращения: 1 августа 2019. Архивировано 13 сентября 2020 года.
- ↑ 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.
- ↑ Gandhi, Rohith Gradient Boosting and XGBoost (англ.). Medium (24 мая 2019). Дата обращения: 4 января 2020. Архивировано 28 марта 2020 года.
- ↑ Tree Boosting With XGBoost – Why Does XGBoost Win "Every" Machine Learning Competition? (амер. англ.). Synced (22 октября 2017). Дата обращения: 4 января 2020. Архивировано 28 марта 2020 года.
- ↑ John Chambers Award Previous Winners. Дата обращения: 1 августа 2016. Архивировано 31 июля 2017 года.
- ↑ HEP meets ML Award. Дата обращения: 1 августа 2016. Архивировано 8 мая 2018 года.