Откройте для себя XGBoost и получите глубокое понимание этого удивительного алгоритма, а также практическую реализацию.

С увеличением усилий по созданию сложных и продвинутых моделей прикладного машинного обучения требование в первую очередь уменьшить предвзятость, а также дисперсию в обучении с учителем приобретает все большее значение, особенно когда речь идет о решении проблем, связанных с данными, включающих неизмеримое количество данных.

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

Какие существуют типы алгоритмов повышения?

Эти 3 ученика, попадающие под бустинг, помогают нам решать сложные и запутанные задачи, содержащие огромное количество данных:

  1. Адаптивное повышение. Используемый в качестве метода ансамбля, алгоритм AdaBoost реализуется путем объединения нескольких слабых учеников в одного сильного ученика. Наиболее распространенный алгоритм, используемый с AdaBoost, — это деревья решений с одним уровнем, то есть деревья решений только с 1 разбиением. Эти деревья также называют пнями решений. Он начинается с присвоения одинакового веса всем точкам данных, а затем создает решение для уникального входного объекта. Наконец, результаты получаются из первого пня решения, который анализируется.
  2. Усиление градиента. Ориентированное на уменьшение потери функции потерь, ускорение градиента выбирает слабого обучающегося и на каждом этапе добавляет еще одного слабого обучающегося, чтобы повысить производительность и создать сильную ученик. Проще говоря, мы итеративно добавляем каждую модель и вычисляем остатки ошибок. Используя это значение, прогнозы обновляются, чтобы минимизировать потери (после n итераций остатки падают до 0).
  3. XGBoost (Xtreme Gradient Boosting) — расширенная и более эффективная версия повышения градиента. С несколькими хитростями в рукаве, которые делают его умнее двух остальных, Xtreme Gradient Boosting сильно фокусируется на повышении скорости и эффективности вашей проблемы.

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

Добро пожаловать в терапию глубокого погружения!

Прежде чем углубиться в XGBoost, давайте посмотрим, каковы недостатки Gradient Boosting, которые привели к открытию Xtreme Gradient Boosting.

Основные недостатки Gradient Boosting-

  1. Длительная скорость вычислений. Алгоритм повышения градиента требует больших вычислительных ресурсов, поскольку существует последовательный/итеративный подход к анализу набора данных. Поэтому для расчета прогнозов требуется больше времени.

2. Склонность к переобучению.Из-за слабой техники регуляризации в Gradient Boosting алгоритм часто страдает от переобучения данных.

Теперь давайте посмотрим, почему XGBoost — это экстремальная версия Gradient Boosting!

1. Чрезвычайно быстрый — для расчета выигрыша в каждом разделении XGBoost использует кэш ЦП для хранения вычисленных градиентов и гессиана (покрытия), чтобы быстро выполнять необходимые вычисления. Он использует мощь параллельной обработки и, следовательно, поддерживает распараллеливание, создавая деревья решений!

2. Очень умно — XGBoost — это более упорядоченная форма повышения градиента. XGBoost использует расширенную регуляризацию с такими гиперпараметрами, как лямбда и гамма, что улучшает возможности обобщения модели. Он предназначен для обработки отсутствующих данных с помощью встроенных функций. Действительно умный ребенок!

Вскрытие модели!

Математика -

⚠ Предупреждение. Этот раздел включает в себя некоторые высокоуровневые упражнения для мозга с дифференциальным исчислением, которые иногда могут быть не столь убедительными, но не волнуйтесь, мы справимся! 🤕

1. Теорема Тейлора для аппроксимации функции потерь

Таким образом, разложение Тейлора функции l(Z) в точке Z=z, может быть расширено из приведенного выше уравнения следующим образом:

Теперь предположим, что l(Z) = Z².

Сделаем необходимые расчеты-

  1. Производная 1-го порядка от — 2Z
  2. Производная второго порядка от Z² —2
  3. Производная третьего порядка от Z² —0

Приведенный выше расчет доказывает, что нам не нужно выходить за пределы второго члена, поскольку значение производной третьего порядка равно 0, следовательно, все члены после третьего равны 0. Это доказывает, что ряд Тейлора используется в качестве метода аппроксимации.

Почему в XGBoost?

Вы узнаете это в ближайшее время. Подождите, это только начало. 😃

Теперь давайте подойдем к скрученной части уравнения. Мы знаем, что z = a + delta Z, но что, если delta Z не исправлено? Имея в виду, что дельта Z может варьироваться, значение z также будет меняться. Итак, как мы можем рассчитать правильную дельту Z, чтобы найти следующее Z, которое минимизирует l(Z=z)?

«Хитрость» здесь в том, что мы можем приблизить l(Z=z) к простейшей функции ΔZ вокруг определенной точки a с помощью теоремы Тейлора. Предполагая, что мы можем вычислить l(Z=a) и его производные первого и второго порядка, как я показал ранее, мы можем найти наилучшую дельту Zесли мы решим следующим образом:

Теперь я надеюсь, что наши нейронные сети смогут установить, что при заданной дельта Z как -(G/H) мы можем вычислить следующий лучший Z для минимального l(Z=z), а значение l(Z=z) будет равно l (а) -1/2(Г²/ч).

Вау!😁🤩

Теперь давайте свяжем эту математику с XGBoost, чтобы сшить все для вас!

2. Целевая функция XGBoost (функция потерь + регуляризация)

Посмотрите на уравнение целевой функции XGBoost ниже —

Целевая функция XGBoost является функцией функций. l — это не что иное, как функция обучения дерева классификации и регрессии, которая суммирует текущее и предыдущее аддитивные деревья, и, как заявили исследователи, «не может быть оптимизирована с использованием традиционных методов оптимизации в евклидовой космос".

Целевую функцию можно представить как f(x +delta x), где x = (y(i)hat)^(t-1). Вы можете вспомнить что-нибудь из Тейлора? Нахождение дельты Z, которое даст нам следующий лучший Z=z, где l (Z)будет минимальным.

Вот где аппроксимация Тейлора вступает в игру в XGBoost! В то время как Gradient Boosting использует отрицательные градиенты для оптимизации функции потерь, XGBoost использует расширение Тейлора для расчета значения функции потерь для различных базовых обучающихся. Итак, нам нужна аппроксимация функции Тейлора, чтобы преобразовать исходную целевую функцию в функцию в евклидовой области, чтобы иметь возможность использовать традиционные методы оптимизации.

Теперь из чего состоит f(x)?

f(x) — это древовидная функция, определяемая такими условиями, как глубина дерева (max_depth), глубина дерева, >минимальный вес выборки (или сумма гессиана) в листе (min_child_weight), выбор функций, доступных при построении разделения такие условия, как c1‹v1 (colsample_bytree, colsample_bylevel, colsample_bynode) и т. д. Они называются параметрами усилителя дерева. .

Имейте в виду, что в нашем случае f(x) — это функция потерь l, а a – прогнозируемое значение (t-1) предыдущего шага, а Δx – новый учащийся, который нам нужно добавить на шаге . t. Итак, на каждой итерации t, мы можем записать целевую функцию (потери) как простую функцию нового ученика и применить методы оптимизации евклидова пространства.

В двух словах, a — это прогноз на этапе (t-1), тогда как (x-a) — это новый ученик, которого нам нужно добавить на шаге (t), чтобы жадно минимизировать цель.

Итак, если мы решим использовать приближение Тейлора второго порядка, мы получим:

Где,

Удалив постоянные части, мы получим упрощенную целевую функцию, которую нужно минимизировать на шаге t —

Обратите внимание, что «gi» — это производная первого порядка потерь на предыдущей итерации по отношению к прогнозам на предыдущей итерации. «привет» — это производная второго порядка потерь на предыдущей итерации по отношению к прогнозам на предыдущей итерации. Таким образом, XGBoost может вычислить «gi» и «hi» перед тем, как начать изучать различные базовые обучающиеся, так как после этого это будет просто вопрос умножения.

Отсюда можно сделать вывод, что XGBoost не исследует все возможные древовидные структуры, а жадно строит дерево. Разделение, которое приводит к максимальному сокращению потерь, выбирается следующим лучшим учеником!

Подключи и играй, не так ли?😏

Теперь давайте перейдем к компоненту регуляризации.

2.1 Компоненты регуляризации и гиперпараметры

Как я объяснял ранее, XGBoost использует ряд Тейлора для аппроксимации значения функции потерь для базового учащегося, тем самым уменьшая нагрузку на машину для расчета точных потерь для различных возможных базовых учащихся.

Но почему регуляризатор?

Мы знаем, что регуляризация измеряет сложность деревьев. XGBoost использует 2 параметра для вычисления сложности деревьев.

Внимательно посмотрите на следующее уравнение:

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

Таким образом, общая сложность определяется как сумма количества листьев, взвешенных по гамме, и лямбда-взвешенной нормы L2 вашего листа- балл, также указанный как вес листа.

Теперь давайте рассчитаем регуляризацию для примера дерева.

Внимательно рассмотрите изображение выше. У нас есть образец дерева с 2 узлами и 3 листьями. Веса листьев 1, 2 и 3 задаются как w1, w2 и w3 соответственно.

Таким образом, сложность:

Ω = γ* (количество листьев)+ 1/2*λ ((w1)² + (w2)² + (w3)²)

Подставляя значения, получаем,

Ω = γ* 3+ 1/2*λ (4 + 0.01+ 1)

Здесь важно обратить внимание на гиперпараметры.

  1. ɤ (гамма, по умолчанию = 0, псевдоним: min_split_loss) — это значение, которое определяет критерии сокращения. Понизьте гамму, понизьте агрессивный подход к обрезке дерева, повысьте гамму, очень агрессивный подход к обрезке дерева. Всякий раз, когда значение гаммы меньше значения усиления, происходит разделение, в противном случае разделения не происходит. Другими словами, значение гаммы — это минимальное снижение потерь, необходимое для создания дальнейшего раздела на листовом узле дерева. Чем больше гамма, тем более консервативным будет алгоритм.
  2. ƛ(Lamda, default=1, псевдоним: reg_lambda) — параметр регуляризации. Он отвечает за регуляризацию L2 по весам листьев. Член регуляризации L2 по весам. Увеличение этого значения сделает модель более консервативной.

Итак, теперь, когда мы знаем, что такое целевая функция, мы можем понять, как может выглядеть уравнение окончательной модели —

Хорошо, давайте объясним вам это. Предположим, f — это набор базовых учащихся, заданный как —

f = {f1, f2, f3, f4,…, f(xi)}

Итак, окончательный прогноз модели будет:

Потрясающий! Теперь вы знаете, почему XGBoost постепенно или, скорее, аддитивно учится на своих ошибках. 😎

3. Завершение треснувшей модели

Если вы добрались сюда, я горжусь вашим терпением (и моим тоже)🙂!

Давайте подытожим то, что мы узнали до сих пор, собрав вещи воедино.

  1. Сначала мы узнали о приближении Тейлора, которое есть не что иное, как 👇

2. Затем мы применили приближение Тейлора к целевой функции 👇

где члены gi и hi представляют собой дифференцирование 1-го и 2-го порядка, выполненное для аппроксимации целевой функции.

3. Теперь, когда мы приблизили нашу целевую функцию к ее квадратичной форме, давайте сложим потери при обучении вместе с формулой регуляризации, которую мы вычислили ранее. 👇

Где (G, H) => представляет значения всего дерева, тогда как (g, h) => представляет значения отдельных листьев в дереве.

4. Теперь, если вы внимательно посмотрите на полученную нами упрощенную целевую функцию, вы увидите, что это сумма T квадратичных функций. 👇

5. Теперь для каждой из этих квадратичных функций мы можем вывести оптимальный вес. 👇

6. Теперь, когда оптимальный вес получен, мы можем подставить его обратно в исходную целевую функцию, и, следовательно, мы получим минимальную целевую функцию.

Отлично!🧐

Теперь давайте посмотрим, как XGBoost тренируется и жадно растет.

4. Быстрая демонстрация процесса обучения

А теперь посмотрите на картинку ниже!

Обратите внимание, что на 2-м шаге 1-я целевая функция вычисляется для листовых узлов 1, 2 и 3. Хорошо. Теперь, если вы внимательно посмотрите на 2-ю целевую функцию, вы заметите, что она учитывает узлы 1, 4 и 5, поскольку они являются текущими листовыми узлами. Итак, теперь должно быть очень ясно, как рассчитывается целевая функция.

Теперь вы видите новый термин под названием «Усиление». Вы, должно быть, думаете, что это такое.

Прирост = Оценка сходства после разделенияПоказатель схожести до разделения

Меньшее усиление на каждом уровне означает, что для управления переоснащением дерева значение ƛ можно увеличить. Влияние выброса на прогноз значительно уменьшится, если ƛ больше.

Отсюда мы можем заключить, что регуляризация используется для контроля переобучения.

Предположим, здесь заданное значение ɤ равно 60, тогда снова произойдет разделение и будет рассчитан коэффициент усиления, иначе, если заданное значение ɤ равно 70, дальнейшего разделения не произойдет. Так будет происходить автоматическое удаление.

5. Компромисс

  • Оптимизация потери при обучении поощряет прогностические модели.
  • Оптимизация регуляризации обеспечивает обобщение более простых моделей.

6. Подведение итогов всей работы XGBoost

Итак, мы можем легко понять из рисунка выше, что —

  • 1-й у нас слабый ученик.
  • Затем в цикле for, где t — это общее количество всех деревьев, которые нужно построить, мы создаем новый экземпляр модели, и дерево строится с использованием ранее обсужденного алгоритма обучения дерева.
  • Наконец, полученная нами минимальная целевая функция используется в построениях, и она определяет, насколько хороша древовидная структура.
  • Затем все новые модели аддитивно объединяются, и обучение прекращается либо при достижении T, либо при достижении целевой функцией приемлемого уровня.

Таким образом, окончательная модель представляет собой аддитивную комбинацию всех моделей, построенных в цикле, и это окончательная ансамблевая модель XGBoost.

Вот и все! Вы сделали с математикой! Облегчение, да? 😂

Теперь самое простое. Вы знаете, верно?

Выполнение!

Следующий код предназначен для XGBoost:

А вот и ты! Вы завершили терапию XGBoost! 😁🎉

Заключение

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

Если вы новичок в науке о данных и машинном обучении и у вас есть конкретные вопросы, касающиеся науки о данных/ML-AI, руководства для карьерного перехода в науку о данных, подготовки к собеседованию/резюме или вы даже хотите пройти пробное собеседование перед Ваш день Д, не стесняйтесь заказать звонок 1:1 здесь. Буду рад помочь!

Удачного машинного обучения! 🤖

До следующего раза…✌

Больше контента на plainenglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Получите эксклюзивный доступ к возможностям написания и советам в нашем сообществе Discord.