Что такое XGBoost? А как его оптимизировать?

В мире машинного обучения и соревнований Kaggle алгоритм XGBoost занимает первое место.

Вступление

Как и многие специалисты по обработке данных, XGBoost теперь является частью моего набора инструментов. Этот алгоритм является одним из самых популярных в мире науки о данных (реальном или соревновательном). Его многозадачность позволяет использовать его в проектах регрессии или классификации. Его можно использовать для табличных, структурированных и неструктурированных данных.

Блокнот с кодом доступен на GitHub. Блокнот предназначен для использования при классификации документов (текста).

XGBoost

XGBoost или eXtreme Gradient Boosting - это алгоритм на основе дерева (Chen and Guestrin, 2016 [2]). XGBoost является частью древовидной структуры (дерево решений, случайный лес, упаковка, усиление, градиентное усиление).

Повышение - это метод ансамбля, основной целью которого является уменьшение систематической ошибки и дисперсии. Цель состоит в том, чтобы последовательно создавать слабые деревья, чтобы каждое новое дерево (или учащийся) фокусировалось на слабости (неверно классифицированных данных) предыдущего. После добавления слабого ученика веса данных корректируются, что называется «повторным взвешиванием». Все это формирует сильную модель после сходимости из-за автокоррекции после добавления каждого нового ученика.

Сильной стороной XGBoost является параллелизм и оптимизация оборудования. Данные хранятся в оперативной памяти, называемой блоком, и хранятся в формате сжатого столбца [CSC]. Алгоритм может выполнять обрезку дерева для удаления ветвей с низкой вероятностью. Функция потерь модели имеет член, который штрафует сложность модели с регуляризацией, чтобы сгладить процесс обучения (уменьшить вероятность переобучения).

Модель хорошо работает даже с пропущенными значениями или множеством нулевых значений с учетом разреженности. XGBoost использует алгоритм, называемый «алгоритм взвешенного квантильного наброска», это позволяет алгоритму сосредоточиться на неправильно классифицированных данных. Цель каждого нового ученика - научиться классифицировать неправильные данные после каждой итерации. Метод позволяет сортировать данные по квантилям, чтобы найти правильную точку разделения. Это цель параметра ϵ, который представляет собой значение разделения (= 0,1; квантили = [10%, 20%,…, 90%]).

Количество итераций для процесса повышения автоматически определяется алгоритмом со встроенным методом перекрестной проверки.

Авторы приводят таблицу со сравнением различных древовидных алгоритмов:

Оптимизация

XGBoost имеет гиперпараметры (параметры, которые не распознаются оценщиком), которые должны быть определены с помощью оптимизации параметров. Процесс прост: каждый оцениваемый параметр представлен списком значений, каждая комбинация затем проверяется моделью, показатели которой сравниваются, чтобы определить лучшую комбинацию. При поиске параметров необходимо руководствоваться метриками путем перекрестной проверки. Не бойтесь, sklearn выполняет две функции: RandomizedSearchCV и GridSearchCV.

Поиск по сетке

Поиск по сетке - это метод настройки, который пытается вычислить оптимальные значения гиперпараметров. Это исчерпывающий поиск по заданному вручную подмножеству пространства гиперпараметров алгоритма.

Случайный поиск

Этот второй метод считается более мощным (Bergstra and Bengio, 2012) [1], поскольку параметры выбираются случайным образом. Случайный поиск может использоваться в непрерывных и смешанных пространствах и очень эффективен, когда только небольшое количество гиперпараметров влияет на конечную производительность.

Как пользоваться этими методами?

Ноутбук

Случайный поиск

Начнем с случайного поиска. В приведенном ниже коде показано, как RandomizedSearchCV(). Оцениваемые гиперпараметры хранятся в словаре. XGBoost может учитывать другие гиперпараметры во время обучения, такие как ранняя остановка и набор проверки. Вы можете настроить их с помощью другого словаря, переданного в методе fit().

В следующем коде я использую лучшие параметры, полученные с помощью случайного поиска (содержащегося в переменной best_params_) для инициализации словаря поиска по сетке.

Поиск по сетке

В следующем коде , вы найдете конфигурацию для поиска по сетке. Как было показано ранее, перекрестная проверка фиксирована в 3 раза.

Заключение

Вы подошли к концу этого (небольшого) руководства по оптимизации гиперпараметров для XGBoost. Но эти методы можно использовать с любым алгоритмом машинного обучения. Имейте в виду, что эти методы оптимизации дороги с точки зрения вычислений (первый код выше генерирует 3000 запусков).

Теперь вы готовы использовать его в своей работе или соревнованиях. Наслаждаться!

использованная литература

[1] Джеймс Бергстра и Йошуа Бенжио, 2012. Случайный поиск для оптимизации гиперпараметров, Journal of Machine Learning Research 13 (2012) 281–305

[2] Тианки Чен и Карлос Гестрин, 2016. XGBoost: A Scalable Tree Boosting System, https://arxiv.org/pdf/1603.02754.pdf