Реализация алгоритма XGBoost на Python с нуля

В предыдущей статье мы обсудили алгоритм XGBoost и показали его реализацию в псевдокоде. В этой статье мы собираемся реализовать алгоритм на Python с нуля.

Предоставленный код представляет собой краткую и облегченную реализацию алгоритма XGBoost (всего около 300 строк кода), предназначенную для демонстрации его основных функций. По существу, она не оптимизирована по скорости или использованию памяти и не включает в себя полный спектр опций, предоставляемых библиотекой XGBoost (более подробную информацию о функциях библиотеки см. https://xgboost.readthedocs.io/). ). Более конкретно:

  1. Код написан на чистом Python, тогда как ядро ​​библиотеки XGBoost написано на C++ (его классы Python представляют собой лишь тонкую обертку над реализацией C++).
  2. Он не включает в себя различные оптимизации, которые позволяют XGBoost обрабатывать огромные объемы данных, такие как взвешенный квантильный эскиз, обучение вне ядра, а также параллельная и распределенная обработка данных. Эти оптимизации будут обсуждаться более подробно в следующей статье этой серии.
  3. В настоящее время реализация поддерживает только задачи регрессии и двоичной классификации, тогда как библиотека XGBoost также поддерживает задачи многоклассовой классификации и ранжирования.
  4. Реализация предоставляет лишь небольшое подмножество гиперпараметров, существующих в библиотеке XGBoost. В частности, он поддерживает следующие гиперпараметры:
  • n_estimators (по умолчанию = 100): количество деревьев регрессии в ансамбле (которое также является количеством итераций повышения).
  • max_eep (по умолчанию = 6): максимальная глубина (количество уровней) каждого дерева.
  • learning_rate (по умолчанию = 0,3): уменьшение размера шага, применяемое к деревьям.
  • reg_lambda (по умолчанию = 1): термин регуляризации L2, применяемый к весам листьев.
  • гамма (по умолчанию = 0): минимальное уменьшение потерь, необходимое для разделения данного узла.

Для единообразия я сохранил те же имена и значения по умолчанию для этих гиперпараметров, которые определены в библиотеке XGBoost.