Поиск по сайту:

Реализация повышения градиента в Python


Вы работаете над проблемой регрессии и ищете эффективный алгоритм для решения вашей проблемы? Если да, вы должны изучить регрессию, повышающую градиент (или GBR).

В этой статье мы начнем с введения в повышение градиента для задач регрессии, с того, что делает его таким выгодным, а также с его различных параметров. Затем мы реализуем модель GBR на Python, используем ее для прогнозирования и оцениваем.

Давайте начнем.

Фото Остина Нила/Unsplash

Предварительные условия

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

Чтобы получить инструкции по началу работы с кодом Python, мы рекомендуем попробовать это руководство для начинающих, чтобы настроить систему и подготовиться к запуску руководств для начинающих.

Введение в регрессию повышения градиента

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

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

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

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

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

Шаги высокого уровня, которые мы выполняем для реализации регрессии повышения градиента, приведены ниже:

  1. Выберите слабого ученика
  2. Используйте аддитивную модель
  3. Определить функцию потерь
  4. Минимизируйте функцию потерь

Фото Джереми Бишопа/Unsplash

Сравнение Gradient Boost с Ada Boost

И Gradient Boost, и Ada Boost работают с деревьями решений, однако деревья в Gradient Boost больше, чем деревья в Ada Boost.

И Gradient Boost, и Ada Boost масштабируют деревья решений, однако Gradient Boost масштабирует все деревья на одинаковую величину, в отличие от Ada Boost.

Преимущества повышения градиента

Более высокая точность. Регрессия градиентного повышения обычно обеспечивает более высокую точность. Когда мы сравниваем точность GBR с другими методами регрессии, такими как линейная регрессия, GBR всегда оказывается победителем. Вот почему GBR используется в большинстве онлайн-хакатонов и соревнований.

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

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

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

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

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

Фото Дрю Патрика Миллера/Unsplash

Количество оценщиков: Обозначается как n_estimators.
Значение этого параметра по умолчанию — 100.
Количество оценщиков — это, по сути, количество этапов повышения, которые должна выполнить модель. Другими словами, количество оценок обозначает количество деревьев в лесу. Большее количество деревьев помогает лучше изучить данные. С другой стороны, большее количество деревьев может привести к увеличению времени обучения. Следовательно, нам нужно найти правильное и сбалансированное значение n_estimators для оптимальной производительности.

Максимальная глубина: обозначается как max_глубина.
Значение max_eep по умолчанию — 3, и это необязательный параметр.
Максимальная глубина — это глубина оценки дерева решений в регрессоре повышения градиента. Нам нужно найти оптимальное значение этого гиперпараметра для достижения наилучшей производительности. Например, лучшее значение этого параметра может зависеть от входных переменных.

Скорость обучения: Обозначается как скорость обучения.
Значение Learning_rate по умолчанию — 0,1. Это необязательный параметр.
Скорость обучения — это гиперпараметр в алгоритме регрессора, повышающего градиент, который определяет размер шага на каждой итерации при движении к минимуму функции потерь.

Критерий: Обозначается как критерий.
Значение критерия по умолчанию — friedman_mse, это необязательный параметр.
критерий используется для измерения качества разделения дерева решений.
mse означает среднеквадратическую ошибку.

Потеря: Обозначается как потеря.
Значение loss по умолчанию — ls, это необязательный параметр.
Этот параметр указывает на функцию потерь, которую необходимо оптимизировать. Существуют различные функции потерь, такие как ls, которая означает регрессию по методу наименьших квадратов. Наименьшее абсолютное отклонение, сокращенно lad, — это еще одна функция потерь. Хубера третья функция потерь представляет собой комбинацию регрессии наименьших квадратов и наименьшего абсолютного отклонения.

Подвыборка: обозначается как подвыборка.
Значение подвыборки по умолчанию — 1,0, и это необязательный параметр.
Подвыборка — это доля выборок, используемая для подбора отдельных обучающихся деревьев. Если подвыборка меньше 1,0, это приводит к уменьшению дисперсии и увеличению систематической ошибки.

Количество итераций без изменений: Обозначается n_iter_no_change.
Значение подвыборки по умолчанию – None и является необязательным параметром.
Этот параметр используется, чтобы решить, будет ли использоваться ранняя остановка для прекращения обучения, когда оценка проверки не улучшается при дальнейшей итерации.
Если этот параметр включен, он будет выделять размер validation_fraction обучающих данных в качестве валидации и прекращать обучение, когда оценка валидации не улучшается.

Получение данных

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

Ниже приведен скриншот описания данных. Как видите, у нас есть две переменные x и y. x — независимая переменная, а y — зависимая переменная.

Данные регрессии повышения градиента

Мы собираемся представить эти данные в виде линии, уравнение которой будет иметь вид y=mx+c.

m — это наклон аналогичной линии, а c — точка пересечения оси Y линии.

Обучение модели GBR

Пришло время реализовать модель. Как вы можете видеть в приведенном ниже коде, мы начнем с определения параметров n_estimators, max_eep, Learning_rate и критерия. Значения этих параметров равны 3, 3, 1 и мсек соответственно. Мы сохранили значения параметров в переменной с именем params.

Мы импортировали ансамбль из sklearn и используем класс GradientBoostingRegressor, определенный с помощью ансамбля.

Мы создаем экземпляр градиента_boosting_regressor_model класса GradientBoostingRegressor, передавая конструктору параметры, определенные выше.

После этого мы вызываем метод fit для экземпляра модели градиента_boosting_regressor_model.

В ячейке 21 ниже вы можете видеть, что создается модель GradientBoostingRegressor. Существует множество параметров, таких как альфа, критерий, инициализация, скорость обучения, потери, максимальная глубина, максимальное количество функций, максимальное количество листовых узлов, минимальное уменьшение примесей, минимальное разделение примесей, минимальный лист выборки, среднее разделение выборок, лист минимальной весовой доли, n оценок, n iter  без изменений, предварительная сортировка, случайное состояние, подвыборка, tol, доля проверки, подробный и теплый старт, а также их значения по умолчанию.

Реализация регрессии повышения градиента в Python

Оценка модели

Давайте оценим модель. Прежде чем оценивать модель, всегда полезно визуализировать то, что мы создали. Итак, я построил график зависимости x_feature от ее прогноза, как показано на рисунке ниже. Это дает нам лучшее понимание того, насколько хорошо модель соответствует данным. И, как ясно видно на диаграмме ниже, похоже, мы хорошо подходим. Мы используем библиотеку pyplot для создания графика ниже. Как вы можете видеть в приведенном ниже коде, я сначала установил размер figsize. После этого с помощью функции title нам нужно задать заголовок сюжета. Затем нам нужно передать объект и метку функции разброса. И, наконец, используйте функцию построения графика, чтобы передать объект, соответствующий ему прогноз и цвет, который будет использоваться.

Визуализируйте модель регрессии повышения градиента

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

Как вы можете видеть ниже, оценка соответствия модели составляет около 98,90%. Это действительно хороший результат, как и ожидалось от такой модели, как регрессия градиентного повышения.

Поиск того, насколько модель лучше всего соответствует данным

Конечные примечания

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

Фото Брюса Марса/Unsplash

Спасибо за чтение! Приятного машинного обучения :)

Статьи по данной тематике: