Мотивация:

Хотя большинство моделей-победителей в соревнованиях Kaggle являются ансамблями некоторых передовых алгоритмов машинного обучения, одной конкретной моделью, которая обычно является частью таких ансамблей, является Gradient Boosting Machines. Возьмем для примера в этом посте победителя Allstate Claims Severity Kaggle Competition Алексей Носков объясняет свой успех в соревновании еще одним вариантом алгоритма GBM под названием XGBOOST. Однако, несмотря на его огромную популярность, многие профессионалы все еще используют этот алгоритм как черный ящик. Таким образом, цель этой статьи - заложить интуитивно понятную основу для этого мощного метода машинного обучения.

Что такое усиление градиента?

Давайте начнем с понимания Boosting! Повышение квалификации - это метод превращения слабых учеников в сильных. При усилении каждое новое дерево соответствует модифицированной версии исходного набора данных. Алгоритм повышения градиента (gbm) проще всего объяснить, сначала представив алгоритм AdaBoost. Алгоритм AdaBoost начинается с обучения дерева решений, в котором каждому наблюдению назначается равный вес. После оценки первого дерева мы увеличиваем веса тех наблюдений, которые трудно классифицировать, и уменьшаем веса тех, которые легко классифицировать. Таким образом, второе дерево выращивается на этих взвешенных данных. Здесь идея состоит в том, чтобы улучшить предсказания первого дерева. Поэтому наша новая модель - Дерево 1 + Дерево 2. Затем мы вычисляем ошибку классификации из этой новой модели ансамбля из двух деревьев и вырастаем третье дерево, чтобы предсказать исправленные остатки. Мы повторяем этот процесс для указанного количества итераций. Последующие деревья помогают нам классифицировать наблюдения, которые плохо классифицируются предыдущими деревьями. Таким образом, прогнозы окончательной модели ансамбля представляют собой взвешенную сумму прогнозов, сделанных предыдущими древовидными моделями.

Gradient Boosting обучает множество моделей постепенно, аддитивно и последовательно. Основное различие между AdaBoost и Gradient Boosting Algorithm заключается в том, как эти два алгоритма выявляют недостатки слабых учеников (например, деревья решений). В то время как модель AdaBoost выявляет недостатки с помощью точек данных с большим весом, повышение градиента выполняет то же самое, используя градиенты в функции потерь (y = ax + b + e, e требует особого упоминания, поскольку это термин ошибки) . Функция потерь - это мера, показывающая, насколько хорошо коэффициенты модели соответствуют базовым данным. Логическое понимание функции потерь будет зависеть от того, что мы пытаемся оптимизировать. Например, если мы пытаемся спрогнозировать продажные цены с помощью регрессии, то функция потерь будет основана на ошибке между истинными и прогнозируемыми ценами на жилье. Точно так же, если наша цель - классифицировать невозвратные кредиты, функция убытков будет показателем того, насколько хороша наша прогностическая модель при классификации плохих кредитов. Одна из самых больших мотиваций использования повышения градиента заключается в том, что оно позволяет оптимизировать функцию стоимости, заданную пользователем, вместо функции потерь, которая обычно предлагает меньший контроль и по существу не соответствует реальным приложениям.

Обучение модели GBM в R

Чтобы обучить модель gbm в R, вам сначала нужно установить и вызвать библиотеку gbm. Функция gbm требует, чтобы вы указали определенные аргументы. Вы начнете с указания формулы. Это будет включать ваш ответ и переменные-предикторы. Затем вы укажете распределение вашей переменной ответа. Если ничего не указано, то gbm попытается угадать. Некоторые часто используемые распределения включают «бернулли» (логистическая регрессия для результата 0–1), «гауссовский» (квадрат ошибок), «tdist» (потеря t-распределения) и «пуассон» (подсчет результатов). Наконец, мы укажем данные и аргумент n.trees (в конце концов, gbm - это ансамбль деревьев!) По умолчанию модель gbm предполагает 100 деревьев, которые может дать хорошую оценку производительности нашего GBM.

Обучение модели gbm на наборе данных Kaggle Titanic: я использовал знаменитый набор данных Titanic от Kaggle, чтобы проиллюстрировать, как мы можем реализовать модель gbm. Я начал с загрузки данных Titanic в свою консоль R с помощью функции read.csv (). Затем исходный набор данных был разделен на отдельные наборы поездов и тестов с помощью функции createDataPartition (). Это важное разделение будет чрезвычайно полезно на более поздних этапах для оценки производительности модели на отдельном наборе данных удержания (тестовые данные) и для расчета значения AUC. На следующем экране отображается код R.

Примечание. Учитывая небольшой размер исходного набора данных, я назначил 750 наблюдений поезду и 141 наблюдение тестовой задержке. Кроме того, определяя начальное значение, я гарантировал, что каждый раз генерируется один и тот же набор случайных чисел. Это устранит неопределенность в отношении результатов моделирования и поможет точно оценить производительность модели.

Следующим шагом является обучение модели gbm с использованием нашей обучающей задержки. Хотя все остальные аргументы в точности совпадают с тем, что обсуждалось в предыдущем разделе, были указаны два дополнительных аргумента - Interaction.depth и shrinkage. Глубина взаимодействия определяет максимальную глубину каждого дерева (т. Е. Самый высокий уровень взаимодействия переменных, разрешенный при обучении модели). Усадка считается скоростью обучения. Он используется для уменьшения или уменьшения воздействия каждого дополнительного приспособленного базового ученика (дерева). Это уменьшает размер дополнительных шагов и, таким образом, снижает важность каждой последующей итерации.

Примечание. Несмотря на то, что изначально мы обучаем нашу модель с помощью 1000 деревьев, мы можем сократить количество деревьев на основе метода «вне сумки» или «перекрестной проверки», чтобы избежать переобучения. Позже мы увидим, как включить это в нашу модель gbm (см. Раздел «Настройка модели gbm и ранняя остановка»).

Понимание выходных данных модели GBM

Когда вы распечатываете модель gbm, она напомнит вам, сколько деревьев или итераций было использовано при ее выполнении. Используя свои внутренние вычисления, такие как Важность переменной, он также укажет, имела ли какая-либо из переменных-предикторов нулевое влияние в модели.

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

Настройка модели GBM и ранняя остановка

Настройка гиперпараметров особенно важна для моделирования gbm, поскольку они подвержены переобучению. Особый процесс настройки количества итераций для такого алгоритма, как gbm и случайный лес, называется «Ранняя остановка». Ранняя остановка выполняет оптимизацию модели, отслеживая производительность модели на отдельном наборе тестовых данных и останавливая процедуру обучения, когда производительность тестовых данных перестает улучшаться после определенного количества итераций.

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

В то время как другие алгоритмы повышения, такие как «xgboost», позволяют пользователю указывать набор показателей, таких как ошибка и потеря журнала, алгоритм «gbm» специально использует метрику «ошибка» для оценки и измерения производительности модели. . Чтобы реализовать раннюю остановку в «gbm», нам сначала нужно указать дополнительный аргумент под названием «c.v folds» во время обучения нашей модели. Во-вторых, в пакете gbm есть функция по умолчанию gbm.perf () для определения оптимального количества итераций. Аргумент «метод» позволяет пользователю указать используемый метод («OOB» или «cv») для определения оптимального количества деревьев.

На следующем экране консоли отображается оптимальное количество деревьев в соответствии с методом «OOB» и «cv».

Кроме того, мы также увидим два графика, указывающих оптимальное количество деревьев на основе соответствующей используемой техники. График слева показывает ошибку в тесте (зеленая линия) и наборе данных поезда (черная линия). Синяя пунктирная линия указывает оптимальное количество итераций. Можно также четко заметить, что за пределами определенной точки (169 итераций для метода «cv») ошибка тестовых данных, по-видимому, увеличивается из-за переобучения. Следовательно, наша модель остановит процедуру обучения на заданном оптимальном количестве итераций.

Прогнозы с использованием gbm

Наконец, функция pred.gbm () позволяет генерировать прогнозы на основе данных. Одной из важных особенностей прогноза gbm является то, что пользователь должен указать количество деревьев. Поскольку в функции прогнозирования нет значения по умолчанию для «n.trees», разработчик модели обязательно должен указать его. Поскольку мы вычислили оптимальное количество деревьев, выполнив раннюю остановку, мы будем использовать оптимальные значения для указания аргумента «n.trees». Я использовал оптимальное решение, основанное на методе перекрестной проверки, поскольку перекрестная проверка обычно превосходит метод OOB для больших наборов данных. Еще один аргумент, который пользователь может указать в функции прогнозирования, - это тип, который управляет типом вывода, генерируемого функцией. Другими словами, тип относится к шкале, в которой gbm делает прогнозы.

Подведение итогов и оценка результатов:

Наконец, наиболее важной частью любого упражнения по моделированию является оценка прогнозов и измерение производительности модели. Я начал с создания матрицы путаницы. Действительно полезный инструмент, матрица неточностей сравнивает фактические значения модели с предсказанными значениями. Это называется матрицей путаницы, потому что она показывает, насколько ваша модель запуталась между двумя классами. Столбцы матрицы неточностей - это истинные классы, а строки матрицы - это предсказанные классы. Прежде чем вы создадите матрицу путаницы, вам нужно «сократить» ваши предсказанные вероятности до заданного порога, чтобы превратить вероятности в предсказания класса. Вы можете легко сделать это с помощью функции ifelse (). В нашем примере случаи с вероятностями больше 0,7 были помечены как 1, то есть вероятность выживания, а случаи с меньшей вероятностью были помечены как 0. Не забудьте вызвать библиотеку «каретка», чтобы запустить матрицу путаницы.

Запуск последней строки создаст нашу матрицу путаницы.

Я так же рад, как и вы, видеть точность нашей модели! Погружаясь глубже в матрицу путаницы, мы видим, что наша модель идеально предсказала 118 из 141 наблюдения, что дало нам точность 83,69%. Наша модель ошиблась в 23 случаях. Эти 23 случая были разделены на ложноотрицательные и ложноположительные как 9 и 14 соответственно.

ROC и AUC: на основе истинных и ложных положительных результатов я построил кривую ROC и рассчитал значение AUC.

По определению, чем ближе кривая ROC подходит к верхнему левому углу сетки, тем лучше. Верхний левый угол соответствует проценту истинных положительных результатов, равному 1, и количеству ложных положительных результатов, равному 0. Это также означает, что у хороших классификаторов области под кривыми больше. Как видно, наша модель имеет AUC 0,8389.

Заключительные замечания:

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

  1. Нежное введение в алгоритм повышения градиента для машинного обучения
  2. Мастер Kaggle объясняет, как повысить градиент
  3. Пользовательские функции потерь для повышения градиента
  4. Машинное обучение с древовидными моделями в R

Кроме того, я рад сообщить, что моя недавняя заявка на конкурс Titanic Kaggle Competition попала в топ-20 процентов. Моя лучшая прогностическая модель (с точностью 80%) была ансамблем обобщенных линейных моделей, машин градиентного повышения и алгоритмов случайного леса. Я загрузил свой код на GitHub, и его можно найти по адресу: https://lnkd.in/dfavxqh