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:
- Вычислить «градиенты» и «гессианы»:
- Обучить базовую модель (или слабую модель, например, дерево) на обучающей выборке путём решения следующей задачи оптимизации:
- Обновить модель:
- Вычислить «градиенты» и «гессианы»:
- Выход