Перейти к содержанию

XGBoost

Материал из Мегавики — свободной энциклопедии
XGBoost
Логотип программы XGBoost
Тип Машинное обучение
Разработчик The XGBoost Contributors
Написана на C++
Операционная система Linux, macOS, Windows
Первый выпуск 27 марта 2014; 12 лет назад (2014-03-27)
Последняя версия 1.6.0 (15 апреля 2022; 4 года назад (2022-04-15))
Лицензия Apache License 2.0
Сайт xgboost.ai

XGBoost[1] (eXtreme Gradient Boosting) — это библиотека с открытым исходным кодом, используемая в машинном обучении и предоставляющая функциональность для решения задач, связанных с регуляризацией градиентного бустинга. Библиотека поддерживается языками программирования C++, Java, Python[2], R[3], Julia[4], Perl[5] и Scala. Библиотека работает под ОС Linux, Windows[6], и macOS[7]. Она работает как на одной машине, так и на системах распределенной обработки Apache Hadoop, Apache Spark и Apache Flink.

В последнее время эта библиотека приобрела большую популярность и привлекла внимание как выбор многих команд-победителей соревнований по машинному обучению[8].

История[править]

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

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

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

Функционал[править]

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

Описание алгоритма[править]

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

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

Вход: обучающее множество {(xi,yi)}i=1N, дифференцируемая функция потерь L(y,F(x)), число слабых обучающихся M и скорость обучения α.

Алгоритм:

  1. Инициализировать модель постоянным значением:
    f^(0)(x)=argminθi=1NL(yi,θ).
  2. Для m = от 1 до M:
    1. Вычислите "градиенты" и "гессианы":
      g^m(xi)=[L(yi,f(xi))f(xi)]f(x)=f^(m1)(x).
      h^m(xi)=[2L(yi,f(xi))f(xi)2]f(x)=f^(m1)(x).
    2. Подогнать базового/слабого обучающегося, используя обучающее множество {xi,g^m(xi)h^m(xi)}i=1N, решив следующую оптимизационную задачу:
      ϕ^m=argminϕΦi=1N12h^m(xi)[g^m(xi)h^m(xi)ϕ(xi)]2.
      f^m(x)=αϕ^m(x).
    3. Обновление модели:
      f^(m)(x)=f^(m1)(x)+f^m(x).
  3. Результат: f^(x)=f^(M)(x)=m=0Mf^m(x).

Награды[править]

  • Премия John Chambers (2016)[18]
  • Премия High Energy Physics meets Machine Learning award (HEP meets ML) (2016)[19]

Примечания[править]

  1. Ссылка на страницу проекта.
  2. Python Package Index PYPI: xgboost. Дата обращения: 1 августа 2016.
  3. CRAN package xgboost. Дата обращения: 1 августа 2016.
  4. Julia package listing xgboost. Дата обращения: 1 августа 2016.
  5. CPAN module AI::XGBoost. Дата обращения: 9 февраля 2020.
  6. Installing XGBoost for Anaconda in Windows. Дата обращения: 1 августа 2016.
  7. Installing XGBoost on Mac OSX. Дата обращения: 1 августа 2016.
  8. 8,0 8,1 XGBoost - ML winning solutions (incomplete list). Дата обращения: 1 августа 2016.
  9. Story and Lessons behind the evolution of XGBoost. Дата обращения: 1 августа 2016.
  10. Rabit - Reliable Allreduce and Broadcast Interface. Дата обращения: 1 августа 2016.
  11. html XGBoost4J. Дата обращения: 1 августа 2016.
  12. com/InAccel/xgboost XGBoost on FPGAs. Дата обращения: 1 августа 2019.
  13. Труды 22-й Международной конференции ACM SIGKDD по обнаружению знаний и добыче данных, Сан-Франциско, Калифорния, США, 13-17 августа 2016 года. // . — ACM, 2016. — doi:10.1145/2939672.2939785.
  14. (2021) «Approximating XGBoost with an interpretable decision tree.». Information Sciences 572 (2021). doi:10.1016/j.ins.2021.05.055.
  15. Gandhi, Rohith. Gradient Boosting and XGBoost (англ.). Medium (24 мая 2019). Дата обращения: 4 января 2020.
  16. Boosting algorithm: XGBoost (англ.). Towards Data Science (14 мая 2017). Дата обращения: 4 января 2020.
  17. {Tree Boosting With XGBoost - Why Does XGBoost Win "Every" Machine Learning Competition? (англ.). Synced (22 октября 2017). Дата обращения: 4 января 2020.
  18. John Chambers Award Previous Winners. Дата обращения: 1 августа 2016.
  19. HEP meets ML Award. Дата обращения: 1 августа 2016.