Psst .. Признание: в прошлом я использовал и настраивал модели, даже не зная, что они делают. Я попытался сделать то же самое с машинами для повышения градиента - LightGBM и XGBoost - и это было ... разочаровывающе!
Этот метод (или, скорее, ленивость) отлично работает для более простых моделей, таких как линейная регрессия, деревья решений и т. Д. У них всего несколько гиперпараметров - learning_rate
, _2 _, _ 3_ - и легко понять, что они означают. .
Но GBM - это другой мир:
- У них огромное количество гиперпараметров - тех, которые могут сделать или сломать вашу модель.
- И в довершение всего, в отличие от Random Forest, их настройки по умолчанию часто не оптимальны!
Итак, если вы хотите использовать GBM для моделирования ваших данных, я считаю, что вы должны получить хотя бы общее представление о том, что происходит внутри. Вы не можете уйти, используя его как полный черный ящик.
И в этом я хочу вам помочь в этой статье!
Что я сделаю, так это сделаю очень простое объяснение Gradient Boosting Machines вокруг параметров двух его самых популярных реализаций - LightGBM и XGBoost. . Таким образом, вы сможете узнать, что происходит в алгоритме, и какие параметры вам следует настроить, чтобы улучшить его. Я считаю, что это практическое объяснение позволит вам сразу перейти к их применению в вашем собственном анализе!
Как вы уже догадались, в этой статье я не собираюсь углубляться в математику. Но если вам интересно, я опубликую несколько хороших ссылок, по которым вы могли бы перейти, если хотите совершить прыжок.
Тогда перейдем к делу ...
В статье Мастер Kaggle объясняет повышение градиента автор цитирует своего друга Кагглера Майка Кима:
Моя единственная цель - накачать вчерашний градиент. И повторять это каждый день с непобедимым духом.
Вы знаете, как с каждым днем мы стремимся совершенствоваться, сосредотачиваясь на вчерашних ошибках. Ну знаете что? - GBM тоже так делают!
Давайте узнаем, как с помощью 3-easy-штук -
1. «Ансамбль предсказателей»
GBM делают это, создавая ансамбль предикторов. Армия предсказателей. Каждый из этих предикторов строится последовательно, фокусируясь на ошибках предиктора, предшествовавшего ему.
Вы: Постойте, о каких «предсказателях» вы говорите? Разве GBM не является предсказателем ??
Я: Да, это так. Это первое, что вам нужно знать о Gradient Boosting Machine - это предсказатель, построенный из множества более мелких предсказателей. Ансамбль более простых предикторов. Эти предикторы могут быть любыми моделями прогнозирования регрессоров или классификаторов. Каждая реализация GBM, будь то LightGBM или XGBoost, позволяет нам выбрать один такой простой предиктор. Эй! Это подводит нас к нашему первому параметру -
API sklearn для LightGBM предоставляет параметр:
boosting_type
(LightGBM) ,booster
(XGBoost): для выбора этого алгоритма прогнозирования. Оба они предоставляют вам возможность выбора - gbdt, dart, goss, rf (LightGBM) или gbtree, gblinear или dart (XGBoost).
Но помните, что дерево решений почти всегда значительно превосходит другие варианты. Хорошо то, что это значение по умолчанию для этого параметра; так что вам не о чем беспокоиться!
2. «Уточните предсказания, сделанные предыдущими предсказателями»
Теперь мы подошли к тому, как строятся эти предикторы.
Я: Да, вы правильно угадали - это часть, в которой мы видим, как GBM улучшают себя, «сосредотачиваясь на вчерашних ошибках»!
Итак, GBM в основном создает множество индивидуальных предикторов, и каждый из них пытается предсказать истинный ярлык. Затем он дает окончательный прогноз, усредняя все эти индивидуальные прогнозы.
Но мы не говорим здесь о нашем обычном среднем третьем классе; мы имеем в виду средневзвешенное. GBM присваивает вес каждому из предикторов, который определяет, насколько он влияет на конечный результат - чем выше вес, тем больше его вклад.
Вы: И почему он это делает?
Я: потому что не все предикторы одинаковы.
Каждый предиктор в ансамбле строится последовательно, один за другим - при этом каждый из них больше фокусируется на ошибках своих предшественников.
Каждый раз, когда обучается новый предсказатель, алгоритм присваивает более высокие веса (из нового набора весов) обучающим экземплярам, которые предыдущий предсказатель ошибался. Итак, у этого нового предсказателя теперь больше стимулов для решения более сложных предсказаний.
Вы: Эй, «усреднение прогнозов, сделанных множеством предсказателей» ... Разве это не случайный лес?
Я: Ага ... хороший улов! «Усреднение прогнозов, сделанных множеством предикторов», на самом деле, и есть ансамблевой метод. А случайные леса и машины для повышения градиента - это 2 типа ансамблевых методов.
Но в отличие от GBM, предикторы, построенные в Random Forest, не зависят друг от друга. Они строятся не последовательно, а параллельно. Итак, в случайном лесу нет весов для предикторов. Все они созданы равными.
Вам следует ознакомиться с концепцией мешков и повышения. Random Forest - это алгоритм мешков, а Gradient Boosting Trees - алгоритм повышения.
Все просто, правда?
Как модель определяет количество вводимых предикторов?
- Конечно, через гиперпараметр:
n_estimators
: мы передаем количество предикторов, которые мы хотим, чтобы GBM построил, внутри параметраn_estimators
. Число по умолчанию - 100.
Вы: Но у меня есть другой вопрос. Постоянное построение новых моделей, чтобы сосредоточиться на неправильно обозначенных примерах - разве это не рецепт переобучения?
Я: Ой, это просто ПРОСВЕТЛЕНИЕ! Если вы об этом думали ... вы поняли!
Фактически, это одна из основных проблем при использовании машин для повышения градиента. Но современные реализации, такие как LightGBM и XGBoost, довольно хорошо справляются с этим, создавая слабые предикторы.
3. «Слабые предсказатели»
Слабый предсказатель - это простая модель предсказания, которая работает лучше, чем случайное предположение. Теперь мы хотим, чтобы отдельные предикторы внутри GBM были слабыми, чтобы общая модель GBM была сильной.
Вы: Кажется, это наоборот!
Я: Что ж, это может звучать наоборот, но именно так GBM создает сильную модель. Это помогает предотвратить переобучение. Читайте дальше, чтобы узнать, как ...
Поскольку каждый предиктор собирается сосредоточиться на наблюдениях, которые предшествовали ошибкам, когда мы используем слабый предиктор, эти неправильно обозначенные наблюдения, как правило, содержат некоторую обучаемую информацию, которую может изучить следующий предиктор.
Принимая во внимание, что, если бы предсказатель уже был сильным, было бы вероятно, что неправильно обозначенные наблюдения - это просто шум или нюансы этих выборочных данных. В таком случае модель будет просто переоснащаться для обучающих данных.
Также обратите внимание, что если предикторы слишком слабы, возможно, даже не удастся построить из них сильный ансамбль.
Итак, «создание слабого предиктора» ... это хорошая область для гиперпараметризации, не так ли?
- «Давайте предоставим разработчикам решать настоящую проблему!» 😛
Вот параметры, которые нам нужно настроить, чтобы сделать правильные предикторы (как обсуждалось ранее, эти простые предикторы представляют собой деревья решений):
max_depth
(как XGBoost, так и LightGBM) : Это обеспечивает максимальную глубину, которую может иметь каждое дерево решений. Меньшее значение означает более слабый прогноз.min_split_gain
(LightGBM),gamma
(XGBoost): минимальное снижение потерь, необходимое для создания следующего раздела на листовом узле дерева. Чем ниже значение, тем глубже деревья.num_leaves
(LightGBM): Максимальное количество листьев дерева для базовых учеников. Чем выше значение, тем глубже деревья.min_child_samples
(LightGBM): минимальное количество точек данных, необходимых в дочернем (листовом) узле. Согласно документации LightGBM, это очень важный параметр для предотвращения переобучения.
Примечание. Это параметры, которые можно настроить, чтобы контролировать переобучение.
Примечание 2. Слабые предикторы и сильные предикторы - это еще одно различие между GBM и случайными лесами. Все деревья в Случайном лесу сильны сами по себе, так как построены независимо друг от друга.
Вот и все. Теперь у вас есть хороший обзор всей истории о том, как работает GBM!
Но прежде чем я уйду, я хотел бы, чтобы вы знали еще о нескольких параметрах. Эти параметры не совсем вписываются в историю, которую я только что сшил выше, но они используются, чтобы добиться некоторой эффективности в производительности.
Я также расскажу о том, как настроить это множество гиперпараметров. И, наконец, я укажу вам несколько ссылок, чтобы глубже погрузиться в математику и теорию, лежащую в основе GBM.
[Дополнительный]. Подвыборка
Даже после правильной настройки всех вышеперечисленных параметров может случиться так, что некоторые деревья в ансамбле сильно коррелированы.
Вы: объясните, что вы имеете в виду под «сильно коррелированными деревьями».
Я: Конечно. Я имею в виду деревья решений, которые похожи по структуре из-за схожих разделений, основанных на одинаковых характеристиках. Если у вас есть такие деревья в ансамбле, это будет означать, что ансамбль в целом будет хранить меньше информации, чем то, что он мог бы сохранить, если бы деревья были другими. Итак, мы хотим, чтобы наши деревья были как можно меньше коррелированы.
Для решения этой проблемы мы перед каждой итерацией выполняем подвыборку строк и столбцов данных и обучаем дерево на этой подвыборке. Это означает, что разные деревья будут обучаться на разных подвыборках всего набора данных.
Разные данные - ›Разные деревья
Это соответствующие параметры, на которые следует обратить внимание:
subsample
(как XGBoost, так и LightGBM): определяет долю строк, которую следует учитывать на каждом этапе подвыборки. По умолчанию установлено значение 1, что означает отсутствие субдискретизации.colsample_bytree
(как XGBoost, так и LightGBM): определяет долю столбцов, которую следует учитывать на каждом этапе подвыборки. По умолчанию установлено значение 1, что означает отсутствие субдискретизации.subsample_freq
(LightGBM): указывает, что упаковка должна выполняться после каждыхk
итераций. По умолчанию он установлен на 0. Поэтому убедитесь, что вы установили какое-то ненулевое значение, если хотите включить подвыборку.
[Дополнительный]. Скорость обучения
learning_rate
(как XGBoost, так и LightGBM):
Это также называется усадкой. Эффект от его использования заключается в том, что обучение замедляется, что, в свою очередь, требует добавления большего количества деревьев в ансамбль. Это дает модели эффект регуляризации. Это снижает влияние каждого отдельного дерева и оставляет место для будущих деревьев для улучшения модели.
[Дополнительный]. Вес класса
class_weight
(LightGBM):
Этот параметр чрезвычайно важен для задач классификации нескольких классов, когда у нас есть несбалансированные классы. Недавно я участвовал в соревновании Kaggle, где простая установка значения этого параметра наbalanced
заставляла мое решение перескакивать с 50% лучших в таблице лидеров на 10% лучших.
Вы можете ознакомиться с API sklearn для LightGBM здесь и для XGBoost здесь.
Поиск наилучшего набора гиперпараметров
Даже после понимания использования всех этих гиперпараметров может быть чрезвычайно сложно найти хороший их набор для вашей модели. Их просто СТОЛЬКО!
Поскольку вся моя история строилась вокруг этих гиперпараметров, я хотел бы вкратце рассказать, как можно обойти настройку гиперпараметров.
Вы можете использовать RandomizedSearchCV
sklearn, чтобы найти хороший набор гиперпараметров. Он будет случайным образом перебирать подмножество всех возможных комбинаций гиперпараметров и возвращать наилучший возможный набор гиперпараметров (или, по крайней мере, что-то близкое к наилучшему).
Но если вы хотите пойти еще дальше, вы можете просмотреть набор гиперпараметров, который он возвращает с помощью GridSearchCV
. Поиск по сетке обучит модель, используя все возможные комбинации гиперпараметров, и вернет лучший набор. Обратите внимание, что, поскольку он пробует все возможные комбинации, его запуск может быть дорогостоящим.
Итак, где можно использовать алгоритм?
GBM хороши для эффективного моделирования любых структурированных табличных данных. Их используют многократные выигрышные решения соревнований Kaggle.
Вот список соревнований Kaggle, в которых LightGBM использовался в модели-победителе.
Их проще реализовать, чем многие другие методы стековой регрессии, и они также легко дают лучшие результаты.
Говоря об использовании GBM, я хотел бы рассказать вам немного больше о Random Forest. Я вкратце говорил о них выше. Случайные леса - это другой тип ансамблевой техники (основанной на деревьях).
Они великолепны, потому что их настройки параметров по умолчанию довольно близки к оптимальным настройкам. Таким образом, они дадут вам достаточно хороший результат с настройками параметров по умолчанию, в отличие от XGBoost и LightGBM, которые требуют настройки. Но после настройки XGBoost и LightGBM, вероятно, будут работать лучше.
Подробнее о повышении градиента
Как я и обещал, вот несколько ссылок, по которым вы можете перейти, чтобы понять теорию и математику повышения градиента (в порядке моего сходства):
- Как объяснить усиление градиента Терренс Парр и Джереми Ховард »
Это очень длинная, всеобъемлющая и отличная серия статей, в которых пытаются объяснить концепцию людям, не имеющим предварительных знаний в области математики или теории, лежащей в ее основе. - Мастер Kaggle объясняет повышение градиента от Бен Горман »
Очень интуитивно понятное введение в повышение градиента. - « Нежное введение в алгоритм повышения градиента для машинного обучения , автор: Джейсон Браунли»
В нем немного истории, много ссылок, по которым нужно следить дальше, мягкое объяснение и снова без математики!
Я писатель-фрилансер. Вы можете нанять меня, чтобы я написал подобные глубокие увлеченные статьи, объясняющие технологию ML / DL для блога вашей компании. Напишите мне по электронной почте на nityeshagarwal[at]gmail[dot]com
, чтобы обсудить наше сотрудничество.
Сообщите мне свою мысль в разделе комментариев ниже. Вы также можете связаться со мной в LinkedIn или Twitter (подписывайтесь на меня там; я не буду спамить, что вы кормите;))