🤖 Решаем задачи машинного обучения с помощью алгоритма градиентного бустинга
Градиентный бустинг (Gradient Boosting) – один из самых эффективных инструментов для решения задач машинного обучения, в особенности на соревнованиях Kaggle. Чтобы научиться правильно его применять, разберем подробнее лежащие в основе алгоритма процессы.
Градиентный бустинг – это продвинутый алгоритм машинного обучения для решения задач классификации и регрессии. Он строит предсказание в виде ансамбля слабых предсказывающих моделей, которыми в основном являются деревья решений. Из нескольких слабых моделей в итоге мы собираем одну, но уже эффективную. Общая идея алгоритма – последовательное применение предиктора (предсказателя) таким образом, что каждая последующая модель сводит ошибку предыдущей к минимуму.
Предположим, что вы играете в гольф. Чтобы загнать мяч в лунĸу, вам необходимо замахиваться клюшкой, каждый раз исходя из предыдущего удара. То есть перед новым ударом гольфист в первую очередь смотрит на расстояние между мячом и лунĸой после предыдущего удара, так как наша основная задача – при следующем ударе уменьшить это расстояние.
Бустинг строится таким же способом. Для начала, нам нужно ввести определение “лунĸи”, а именно цели, которая является конечным результатом наших усилий. Далее необходимо понимать, куда нужно “бить ĸлюшĸой”, для попадания ближе ĸ цели. С учётом всех этих правил нам необходимо составить правильную последовательность действий, чтобы ĸаждый последующий удар соĸращал расстояние между мячом и лунĸой.
Стоит отметить, что для задач классификации и регрессии реализация алгоритма в программировании будет различаться.
criterion – критерий выбора расщепления, Mean Absolute Error (MAE) или Mean Squared Error (MSE). Используется только при построении деревьев.
init – какой алгоритм мы будем использовать в качестве главного (именно его и улучшает техника бустинга).
learning_rate – скорость обучения.
n_estimators – число итераций в бустинге. Чем больше, тем лучше качество, однако слишком большой увеличение данного параметра может привести к ухудшению производительности и переобучению.
min_samples_split – минимальное число объектов, при котором происходит расщепление. С данным параметром мы можем избежать переобучение.
min_samples_leaf – минимальное число объектов в листе (узле). При увеличении данного параметра качество модели на обучении падает, в то время как время построения модели сокращается. Меньшие значения стоит выбирать для менее сбалансированных выборок.
max_depth – максимальная глубина дерева. Используется для того, чтобы исключить возможность переобучения.
max_features – количество признаков, учитываемых алгоритмом для построения расщепления в дереве.
max_leaf_nodes : Максимальное число верхних точек в дереве. При наличии данного параметра max_depth будет игнорироваться.
Реализация на языке python (библиотека sklearn)
Результат работы кода:
Базовая модель градиентного бустинга с несложной простой настройкой дает нам точность более чем в 95% на задаче регрессии.
Какие библиотеки использовать?
Помимоклассической для машинного обучения sklearn, для алгоритма градиентного бустинга существуют три наиболее используемые библиотеки:
XGBoost – более регуляризованная форма градиентного бустинга. Основным преимуществом данной библиотеки является производительность и эффективная оптимизация вычислений (лучший результат с меньшей затратой ресурсов).
Вы можете установить XGBoost следующим образом:
Библиотека XGBoost предоставляем нам разные классы для разных задач: XGBClassifier для классификации и XGBregressor для регрессии.
Примечание
Все приведенные ниже библиотеки имеют отдельные классы для задач как классификации, так и регрессии.
Пример использования XGBoost для классификации:
Пример использования XGBoost для регрессии:
LightGBM – библиотека от Microsoft. В ней идет добавление авто выбора объектов и фокуса на тех частях бустинга, в которых мы имеем больший градиент. Это способствует значительному ускорению в обучении модели и улучшению показателей предсказания. Основная сфера применения – соревнования с использованием табличных данных на Kaggle.
Вы можете установить LightGBM также при помощи pip:
LightGBM для классификации:
LightGBM для регрессии:
CatBoost – это библиотека градиентного бустинга, которую создали разработчики Яндекса. Здесь используются “забывчивые” (oblivious) деревья решений, при помощи которых мы растим сбалансированное дерево. Одни и те же функции используются для создания разделений (split) на каждом уровне дерева.
Более того, главным преимуществом CatBoost (помимо улучшения скорости вычислений) является поддержка категориальных входных переменных. Из-за этого библиотека получила свое название CatBoost, от "Category Gradient Boosting" (Категориальный Градиентный Бустинг).
Вы можете установить CatBoost проверенным ранее путем:
CatBoost в задаче классификации:
CatBoost в задаче регрессии:
Когда использовать?
Вы можете использовать алгоритм градиентного бустинга при следующих условиях:
Наличие большого количества наблюдений (ближайшее сходство) в тренировочной выборке данных.
Количество признаков меньше количества наблюдений в обучающих данных. Бустинг хорошо работает, когда данные содержат смесь числовых и категориальных признаков или только числовые признаки.
Когда необходимо рассмотреть метрики производительности модели.
Когда НЕ следует использовать XGBoost:
В задачах распознавания изображений и компьютерного зрения (CV – Computer Vision).
В обработке и понимании естественного языка (NLP – Natural Language Processing).
Когда число обучающих выборок значительно меньше чем число признаков (фич).
Плюсы и минусы
Плюсы
Алгоритм работает с любыми функциями потерь.
Предсказания в среднем лучше, чем у других алгоритмов.
Самостоятельно справляется с пропущенными данными.
Минусы
Алгоритм крайне чувствителен к выбросам и при их наличии будет тратить огромное количество ресурсов на эти моменты. Однако, стоит отметить, что использование Mean Absolute Error (MAE) вместо Mean Squared Error (MSE) значительно снижает влияние выбросов на вашу модель (выбор функции в параметре criterion).
Ваша модель будет склонна к переобучению при слишком большом количестве деревьев. Данная проблема присутствует в любом алгоритме, связанном с деревьями и справляется правильной настройкой параметра n_estimators.
Вычисления могут занять много времени. Поэтому, если у вас большой набор данных, всегда составляйте правильный размер выборки и не забывайте правильно настроить параметр min_samples_leaf.
***
Хотя градиентный бустинг широко используется во всех областях науки о данных, от соревнований Kaggle до практических задач, многие специалисты все еще используют его как черный ящик. В этой статье мы разбили метод на более простые шаги, чтобы помочь читателям понять лежащие в основе работы алгоритма процессы. Удачи!
***
Хочу освоить алгоритмы и структуры данных, но сложно разобраться самостоятельно. Что делать?
Алгоритмы и структуры данных действительно непростая тема для самостоятельного изучения: не у кого спросить и что-то уточнить. Поэтому мы запустили курс«Алгоритмы и структуры данных», на котором в формате еженедельных вебинаров вы:
изучите сленг, на котором говорят все разработчики независимо от языка программирования: язык алгоритмов и структур данных;
научитесь применять алгоритмы и структуры данных при разработке программ;
подготовитесь к техническому собеседованию и продвинутой разработке.
Курс подходит как junior, так и middle-разработчикам.