www.machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Алгоритм повышения: GBM

Дата публикации May 7, 2017

Эта статья продолжает предыдущий постАлгоритм повышения: AdaBoost, На этот раз мы обратимся к GBM (Gradient Boosting Machine).

Модели деревьев

Прежде чем углубляться в алгоритмы повышения деревьев, давайте сначала рассмотрим процедуру изучения моделей деревьев. Модели дерева разделяют пространство объектовИксв наборTнеперекрывающиеся прямоугольные области. Для каждого регионаR1,…, RTпрогноз обычно генерируется простой константной моделью.

Предсказание по моделям деревьев

Существуют различные алгоритмы для изучения моделей дерева, такие какКОРЗИНА, C4.5а такжеCHAID, ДляGBM, CARTиспользуется иXGBoostтакже использует алгоритм, аналогичныйКОРЗИНА, Таким образом, мы будем только обсуждатьКОРЗИНАв этом посте.

КОРЗИНАжадно выращивает дерево сверху вниз, используя двоичные разбиения. Для каждого узла дерева учитывается каждое разбиение, параллельное координатным осям, и выбирается тот, который минимизирует цель. Процедура разделения повторяется до тех пор, пока не будет достигнут некоторый критерий остановки.

Изучение древовидной структуры

Функция потерь для дереваесTконечные узлы могут быть записаны как

гдеL_jагрегированная потеря в узлеJ, Рассмотрим, что мы собираемся разделить на узлеКпроцедура разделения представлена ​​в виде

Коэффициент усиления определяется как

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

Изучение весов для данной структуры

Учитывая изученную структуру, для регионаR_jвес оценивается

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

Алгоритм повышения

Алгоритм повышения соответствует ансамблевым моделям

где f 0 - начальное предположение,ФМ (х)является базовой оценкой на итерациима такжеθмвес дляm_thоценщик. Продуктθм * ФМ (х)обозначает «шаг» на итерациим,

Большинство алгоритмов повышения можно рассматривать как решить

на каждой итерации, гдеF (M-1)обозначает текущую оценку. Поэтому проблема ансамбля жадно упрощается как передовая поэтапная аддитивная модель. Мы не оптимизируем ансамбль в глобальном масштабе, а вместо этого стремимся улучшить результат на основе текущей оценки.

Для AdaBoost он решает это уравнение для функции экспоненциальных потерь при условии ограниченияФМ (х)только выводит -1 или 1. ПокаGBMа такжеXGBoostможно рассматривать как два общих алгоритма повышения, которые решают уравнение приблизительно для любой подходящей функции потерь.

GBM: машина повышения градиента

GBMСокращение от «Gradient Boosting Machine», введенное Фридманом в 2001 году. Оно также известно какMART(Деревья множественной аддитивной регрессии) иGBRTГрадиентные деревья регрессии.

GBMсоздает прямую поэтапную аддитивную модель путем реализации градиентного спуска в функциональном пространстве. Аналогично градиентному спуску в пространстве параметров наm_thитерация, направление наискорейшего спуска определяется отрицательным градиентом функции потерь:

Шаг в этом направлении гарантированно уменьшит потери.

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

Тем не менее, отрицательный градиент только дает направление шага. Необходимы дальнейшие усилия для определения длины шагаρ м, Популярным способом является поиск строки:

В связи с этим Фридман представил особое усовершенствование. Учитывая, что на каждой итерации алгоритм фактически генерировалTотдельные прогнозы для каждого регионаR1,…, RTон предложил сделатьTшаги поиска строки, по одному для каждого региона.

Фридман также ввел усадку, где длина шага на каждой итерации умножается на некоторый коэффициентη (0 <η≤1), что доказано для повышения производительности модели на практике.ηтакже называется скоростью обучения, так как ее снижение замедлит процесс обучения. Объединяя все это, «шаг» делается на каждой итерациимэто дать

где длина шагаρ мможет быть разным для каждого региона.

Тогда полученная модель может быть записана как

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

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

гдеn_jmколичество экземпляров отдыха в регионеJ ПозволитьG_jmпредставляет сумму градиента в областиJ, уравнение может быть переписано как

Для фиксированной изученной структуры мы можем напрямую рассчитать веса, которые минимизируют функцию потерь:

Подключив вес обратно к функции потери, функция потери становится:

Тогда для одного узлаJусиление прокси-сервера (игнорируя другие узлы и термин нормализации) разделения определяется как

гдеG_jmLобозначает левый узел раскола иG_jmRобозначает правый узел.

Пройдите через исходный код Sklearn GBM 💻

Для лучшего понимания мы собираемся пройтись по исходному кодуsklearn.ensemble.GradientBoostingClassifier, Для упрощения мы сосредоточимся только на двоичной классификации и наиболее важных фрагментах кода.

Класс GradientBoostingClassifier

Критерий по умолчанию для GBM:friedman_mseмодифицированный видmseспециально для повышения алгоритмов. Однако в нашем случае давайте просто придерживаться самого простогоmse, С точки зрения функции потерь,devianceпо умолчанию для проблемы двоичной классификации, в то время какexponentialспециально для AdaBoost.

функция соответствия, унаследованная от BaseGradientBoosting

Функция подгонки наследуется отclass BaseGradientBoosting, Во-первых, учебный процесс инициализируетсяself._init_state(), гдеloss classтак же какinit_estimatorназначен.

инициализация учебного процесса

Первоначальный прогноз создается черезself.init_.fit()а такжеself.init_.predict(), гдеinit_estimatorназначается какLogOddsEstimator,

первоначальный прогноз

После инициализацииself._fit_stagesначинает соответствовать стадии повышения.

Для каждого этапаDecisionTreeRegressorподходит для прогнозирования остатка (отрицательный градиент).

Подробно,loss.negative_gradient()а такжеloss.update_terminal_regionsопределяется следующим образом.

Помните, что мы упомянули терминproxy gain, который определяется как:

На практике этот трюк может быть дополнительно упрощен как:

Он используется во время процедуры разбиения узла дерева регрессии.

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

Истинная абсолютная примесь узла рассчитывается как:

где m - количество выборок в этом узле.

Для прогнозирования вероятности генерируютсяself.predict_proba(), Первоначальный прогноз даетсяself._init_decision_function(), На каждом этапе оценки обновляютсяpredict_stages, Наконец, оценки нормированы как вероятности.

гдеexpitявляется реализацией логистической сигмоидальной функции.

На самом деле так приятно прогуливаться по коду! 😻💯

Оригинальная статья

Footer decor

© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map