метод наименьших квадратов (MLR) и взвешенный метод наименьших квадратов; Лассо (L1), гребень (L2) и регуляризация эластичной сети; Ядро и машинная регрессия опорных векторов

Привет и добро пожаловать в этот ПОЛНЫЙ ПОДРОБНЫЙ и очень длинный обзор регрессионного анализа в Python! В этом глубоком погружении мы рассмотрим наименьшие квадраты, взвешенные наименьшие квадраты; Лассо, гребень и регуляризация эластичной сети; и завершите с машинной регрессией ядра и опорных векторов! Хотя я хотел бы рассказать о некоторых продвинутых моделях машинного обучения для регрессии, таких как случайные леса и нейронные сети, их сложность требует отдельного поста в будущем! В этом посте я подхожу к регрессионному анализу с двух сторон: теоретическая и прикладная. С теоретической стороны я представлю алгоритмы на базовом уровне и получу их базовое решение, а со стороны приложения я буду использовать sklearn в Python, чтобы применить эти модели к реальному набору данных!

Оглавление

  • Что такое регрессия?
  • Наш набор данных — медицинские расходы
  • Как измерить ошибку?
  • Решение методом наименьших квадратов (MLR)
  • Интерпретация модели
  • Взвешенный метод наименьших квадратов (WLR)
  • Как бороться с переоснащением — регуляризация
  • Как справиться с недообучением — регрессия ядра
  • Машина опорных векторов
  • Заключение

Что такое регрессия?

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

Наш набор данных — медицинские расходы

Чтобы дать некоторое применение теоретической стороне регрессионного анализа, мы будем применять наши модели к реальному набору данных: Личные медицинские расходы. Этот набор данных взят из учебника Бретта Ланца: MMachine Learning with R, где все его наборы данных, связанные с учебником, предоставляются бесплатно в соответствии со следующей лицензией: Database Contents License (DbCL) v1. .0.

Этот набор данных содержит 1338 медицинских карт разных людей, фиксирующих несколько показателей: возраст, пол, ИМТ, количество детей, независимо от того, курят ли они или нет, и регион, в котором они живут. Цель состоит в том, чтобы использовать эти функции для прогнозирования «расходов» людей, стоимости лечения.

Поскольку это уже будет длинный пост, я не буду подробно останавливаться на этапах исследовательского анализа и предварительной обработки; однако они перечислены ниже:

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

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

Как измерить ошибку?

В сообществе машинного обучения было много исследований и дискуссий о наилучшем способе измерения ошибки. Для регрессии большинство измерений ошибок основано на концепции линейной алгебры, известной как нормы. Нормы — это измерения, которые позволяют измерить размер тензора/матрицы/вектора. Как видно, если эти нормы измеряют размер тензора, то цель моделей машинного обучения состоит в том, чтобы минимизировать разницу в норме между нашим ожидаемым результатом и прогнозируемым результатом! В математическом формате норма x обычно определяется как:

Где p — параметр, который изменяет измерение. Ниже приведены некоторые из наиболее распространенных p-норм:

Как мы используем эти нормы, чтобы помочь нам измерить ошибку? Что ж, мы можем использовать их для измерения разницы между предсказанием наших моделей f(x) и фактической целевой переменной y. Таким образом, мы можем измерить ошибку как разницу между прогнозом и фактом, которую можно количественно определить одним числовым значением с использованием нормы:

Двумя наиболее распространенными измерениями ошибок в машинном обучении являются среднеквадратическая ошибка (MSE) и средняя абсолютная ошибка (MAE):

В моделях машинного обучения, которые мы рассмотрим сегодня, MSE выбрана в качестве измерения для количественной оценки ошибки из-за выпуклого характера возведения ошибки в квадрат — с точки зрения непрофессионала, численные методы легче минимизируют квадраты чисел, чем абсолютные из-за к тому, что производная абсолютной операции не определена.

Существует только одна проблема с измерениями ошибок, описанными выше, они не объясняют, насколько хорошо модель работает по отношению к целевому значению, а только размер ошибки. Означает ли большая ошибка плохую модель? Означает ли небольшая ошибка хорошую модель? У хорошей модели может быть очень большая MSE, а у плохой модели может быть небольшая MSE, если вариация целевой переменной невелика. Например, предположим, что у нас есть две разные строки для двух разных наборов данных. Прогноз для набора данных слева имеет более низкий MSE, чем тот, что справа. Значит ли это, что модель слева лучше? Я предполагаю, что вы бы сказали, что линия предсказания справа лучше, чем линия слева, несмотря на более высокий MSE, поскольку набор данных справа имеет более высокую вариацию в переменной Y.

Проблема с использованием только MSE или MAE заключается в том, что они не учитывают изменение целевой переменной. Если целевая переменная имеет большую дисперсию, как в наборе данных справа, то MSE, естественно, будет выше. Популярный показатель, используемый для учета изменения целевой переменной, известен как коэффициент детерминации, обычно называемый R в квадрате:

Как видно из вышеизложенного, R в квадрате пропорционален отношению остаточной суммы в квадрате (RSS) к общей сумме квадратов (TSS). R Squared находится в диапазоне от (-бесконечности, 1]. Где интерпретация представляет собой процент объясненной вариации целевой переменной. Например, предположим, что модель имеет значение R Squared 0,88, тогда эта модель объясняет примерно 88% изменчивости целевой переменной. Следовательно, более желательны более высокие значения R в квадрате, поскольку модель будет объяснять больший процент целевой переменной. Однако, если RSS модели больше, чем TSS, то Метрика R Squared будет отрицательной, что означает, что дисперсия модели перевешивает дисперсию цели, то есть модель отстой.

Решение наименьших квадратов (MLR)

Теперь, когда мы определили способ измерения ошибок, пришло время представить нашу первую классическую модель машинного обучения, метод наименьших квадратов! Как и в большинстве моделей, которые будут обсуждаться, метод наименьших квадратов основан на предположении, что переменная зависимая/целевая является линейной комбинацией переменной feature (при условии, что k функции):

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

Поскольку наши бета-оценки не будут точными, у нас будет погрешность, эпсилон. Это можно записать в матричном формате следующим образом:

Чтобы получить оценочные коэффициенты для бета, есть два основных вывода. Я дам оба. Во-первых, используя простые манипуляции с матрицей:

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

Который можно преобразовать в матричный формат:

Затем мы можем найти градиент J, приравнять его к нулю и найти аналитическое решение для бета!

Как видим, обе методологии привели к одному и тому же решению! На самом деле они равны! Однако, если вы были внимательны, мы сделали три больших предположения: Y распределяется нормально; X^T*X обратим; и ожидаемое значение эпсилон равно нулю с постоянной дисперсией. Хотя на практике эти предположения иногда нарушаются, модель наименьших квадратов по-прежнему работает хорошо! Надеюсь, теперь вы понимаете, почему нам пришлось выполнить логарифмическое преобразование нашей целевой переменной, чтобы достичь нормальности!

Временная сложность стандартного метода наименьших квадратов составляет O(k³), так как временная сложность составляет O(n³) для нахождения обратной матрицы, но наш матричный результат X^T*X на самом деле равен k на k, где k — число функций/столбцов.

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

Чтобы оценить нашу модель, мы можем посмотреть на значение MSE и R² как в тестовом, так и в обучающем наборе данных:

Как видно из гистограммы выше с левой стороны, MSE как для тестовой, так и для обучающей выборки чрезвычайно низка, всего около 0,19; однако, если вы помните, целевая переменная подверглась логарифмическому преобразованию, а это означает, что MSE 0,016 не является относительно малым, учитывая масштаб целевой переменной. Следовательно, лучшим измерением является оценка значения R², которое, как мы видим из гистограммы справа, является приличным. Наша модель объясняет только примерно 79% изменчивости целевой переменной для обучающей выборки и примерно 76% изменчивости для тестовой выборки. Хотя для некоторых сценариев этот результат приемлем, для этого простого набора данных это называется недообучение, когда модель плохо предсказывает целевую переменную. Позже мы рассмотрим некоторые методы решения этой проблемы.

Интерпретация модели

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

Например, вот наши значения бета-коэффициента:

К сожалению, поскольку мы масштабировали целевую переменную с помощью логарифма, значения коэффициентов объясняют логарифм цели. Чтобы бороться с этим, мы можем масштабировать коэффициенты с помощью обратного логарифма, возведения в степень. Вот наши экспоненциальные бета-коэффициенты:

Интерпретация возведенных в степень бета-коэффициентов представляет собой процентное изменение целевой переменной. Например, если человек курит, его медицинские расходы увеличиваются на 116,8% ((2,168–1)*100). С другой стороны, если человек не курит, его медицинские расходы снизятся на 63,9%((0,461–1)*100). По сути, любой бета-коэффициент, превышающий единицу, увеличивает процент медицинских расходов, в то время как любой бета-коэффициент, меньший, приводит к уменьшению процента медицинских расходов. Кроме того, мы можем определенно видеть, что наибольший экспоненциальный бета-коэффициент принадлежит курильщикам, а это означает, что переменная, является ли человек курильщиком, оказывает наибольшее влияние на медицинские расходы из других переменных.

Предположим, что мы не проводили логарифмическое преобразование, как тогда мы будем интерпретировать бета-коэффициенты?

Интерпретация осуществляется с точки зрения единичной шкалы целевой переменной. Поскольку наша целевая переменная измерялась в долларах, мы можем видеть, что если бы человек был курильщиком, его медицинские расходы увеличились бы на 11 907 долларов США; или уменьшится на 11 907 долларов США, если они не курят. Что касается возраста, то мы можем видеть, что чем старше человек становится, тем больше его медицинские расходы будут увеличиваться на 264 доллара США за каждый год жизни. Если бы мы посмотрели на пол, коэффициенты были бы одинаковыми, а это означает, что стоимость медицинских услуг не увеличивается независимо от того, мужчина это или женщина. Надеюсь, вы видите силу интерпретации коэффициентов регрессии наименьших квадратов.

Решение взвешенного метода наименьших квадратов

Одно из основных предположений, сделанных в методе наименьших квадратов, заключается в том, что ошибки, эпсилон, нормально распределяются с постоянной дисперсией:

Это предположение можно проверить, построив график невязок f(x)-y по сравнению с фактическим, обычно называемый графиком невязок. Вот наш остаточный график из нашей предыдущей модели на обучающей выборке:

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

Теперь пришло время для вывода взвешенного решения наименьших квадратов. Для начала мы хотим минимизировать ожидаемую взвешенную остаточную ошибку:

Это может быть преобразовано в матричный формат:

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

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

Одним из основных преимуществ WLS является способность взвешивать разные экземпляры, чтобы отдать предпочтение в модели, либо для создания гомоскедастичности, постоянной дисперсии, либо для лучшего моделирования определенных записей. Однако одним из основных недостатков WLS является способ определения весов. В нашей задаче мы хотим исправить наши остатки, чтобы иметь постоянную дисперсию. Ниже я описал четыре основных типа остаточной дисперсии, встречающиеся на практике. Верхний левый демонстрирует идеал, где дисперсия постоянна со средним значением, равным нулю. В правом верхнем углу показано, как растет остаточная дисперсия с ростом y, показывая распределение типа «МегаФон». В левом нижнем углу показаны нелинейные остатки, показывающие, что нашей модели не хватает сложности для создания ассоциации. Наконец, в правом нижнем углу показана биномиальная остаточная дисперсия. WLS обычно используется только в том случае, если найден биномиальный график или график невязок типа MegaPhone, поскольку нелинейные невязки можно исправить только добавлением нелинейных функций.

Обычное решение для невязок Binomial и MegaPhone состоит в том, чтобы сделать веса равными квадрату остаточной ошибки:

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

В sklearn это просто, просто создайте другую модель и добавьте дополнительный аргумент weight_sample:

Если бы вы проверили эти веса выше, остаточный график выглядел бы аналогично и с аналогичными показателями R² и MSE, это связано с тем, что наша остаточная дисперсия сильно нелинейна:

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

Как бороться с переоснащением — регуляризация

Предположим, мы обучили модель линейной регрессии на заданном наборе данных, и во время ее применения и развертывания мы обнаружили, что она работает крайне плохо, несмотря на хорошие показатели MSE и R² на обучающих данных; это называется переоснащением — когда показатели в наборе данных для тестирования намного хуже, чем в наборе для обучения. Чтобы привести пример:

Как мы видим сверху, у нас есть линейный тренд точек; однако, если бы мы подогнали полином 10-й степени, мы могли бы искусственно минимизировать как MSE, так и R² до нуля в нашем наборе обучающих данных. Несмотря на это, мы можем интуитивно увидеть, что модель будет плохо обобщать, когда будут видны новые данные. Регуляризация работает путем добавления штрафного срока к функции потерь, которая будет наказывать параметры модели; в нашем случае для линейной регрессии — бета-коэффициенты.

Когда дело доходит до линейной регрессии, существует два основных типа регуляризации: Ridge и Lasso. Во-первых, давайте начнем с регрессии хребта, обычно называемой регуляризацией L2, поскольку ее штрафной член возводит в квадрат бета-коэффициенты для получения величины. Идея хребтовой регрессии состоит в том, чтобы наказывать большие бета-коэффициенты. Функция потерь, которую пытается минимизировать гребневая регрессия, выглядит следующим образом:

Как мы видим выше, функция Loss точно такая же, как и раньше, за исключением того, что теперь с добавлением штрафного члена красного цвета. Параметр лямбда масштабирует штраф. Например, если лямбда = 0, то функция такая же, как и раньше в методе наименьших квадратов; однако по мере того, как лямбда становится больше, модель приводит к недообучению, поскольку она снижает размер бета-коэффициентов до нуля. Давайте посмотрим на простой пример ниже:

Как видно из вышеизложенного, при использовании полиномиальной модели 20-й степени для аппроксимации точек и лямбда = 0 у нас нет штрафа и наблюдается чрезмерное переобучение на синей линии. Когда мы начинаем увеличивать лямбда до 0,5, обозначенное оранжевой линией, мы начинаем по-настоящему моделировать базовое распределение; однако мы можем видеть, что когда лямбда = 100 в фиолетовой линии, наша модель начинает становиться прямой линией, что приводит к недообучению, поскольку штрафной член заставляет коэффициенты равняться нулю. Выбор лямбда-значения на практике выполняется либо с помощью Проверки Set, либо с помощью Перекрестной проверки. Таким образом, мы переобучаем нашу модель в нашем обучающем наборе данных с различными значениями лямбда, и тот из них, который лучше всего работает в нашем наборе проверки, выбирается как окончательный для набора данных тестирования.

Математически говоря, наша функция потерь может быть преобразована в матричную форму:

Где бета может быть решена, как и ранее, путем нахождения градиента и установки его равным нулю:

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

Как мы видим сверху, по мере увеличения значения лямбда наша ошибка в наборе для обучения и тестирования резко увеличивается; кроме того, кажется, что минимальная ошибка на тестовом наборе составляет около лямбда = 0. Если вы правильно помните, наш набор данных ошибался не из-за переоснащения, а из-за недообучения! Следовательно, нет смысла использовать регуляризацию, из-за чего наша ошибка тестирования становится хуже, а не лучше! Я просто хотел показать, как можно использовать регрессию гребня, если ваша модель демонстрирует переоснащение!

Следующий метод регуляризации, который будет рассмотрен, — это Lasso, который обычно называют регуляризацией L1, поскольку его штрафной коэффициент строится на основе абсолютного значения бета-коэффициентов:

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

Эти типы условий штрафа часто можно переписать как проблему ограничений:

Поскольку регрессия Риджа возводит бета-коэффициенты в квадрат, построение ограничения приведет к кругу; тогда как Лассо приведет к квадрату. Если бы мы построили два значения бета-коэффициентов (обозначенных w1 и w2 на графике ниже) относительно друг друга, мы могли бы получить следующее:

Красная линия представляет собой диапазон значений, которые могут принимать два значения коэффициента, поскольку значение коэффициента для w1 увеличивается, значение w2 начинает уменьшаться. Когда мы наносим на график наше ограничение нормы L1: |w1|+|w2|≤ лямбда, мы видим, что оно обозначено пунктирным квадратом. Везде, где этот квадрат пересекает красную линию, выбрано значение для коэффициентов, что, как мы видим, приведет к тому, что w1 будет иметь нулевое значение. С другой стороны, когда мы наносим ограничение нормы L2: w1²+w2²≤ лямбда, мы получаем круг, обозначенный пунктирным кружком. Везде, где этот круг пересекается, красная линия является выбранным значением для ограничений, которые, как мы видим, являются небольшими ненулевыми значениями для w1 и w2.

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

Как видно из вышеизложенного, по мере увеличения значения лямбда наша ошибка в обучающем и тестовом наборах резко увеличивается, в конечном итоге сходясь к лямбда = 15. Причина, по которой ошибка сошлась, заключается в том, что наше значение лямбда было слишком большим для модели, и оно сводило все бета-коэффициенты к нулю. Если вы правильно помните, наш набор данных ошибался не из-за переоснащения, а из-за недообучения! Следовательно, нет смысла использовать регуляризацию, из-за чего наша ошибка тестирования становится хуже, а не лучше! Я просто хотел продемонстрировать, как вы используете регрессию Лассо, если ваша модель демонстрирует переоснащение!

Последний метод регуляризации, который я собираюсь представить, — это эластичная сеть, которая пришла к тому, чтобы согласовать Ridge и Lasso, поскольку Ridge наказывает большие коэффициенты, тогда как Lasso сводит коэффициенты к нулю. Идея, лежащая в основе Elastic Net, состоит в том, чтобы создать штраф, который будет одновременно создавать выбор функций и минимизировать размер весов. Существует множество различных версий Elastic Net, вот две наиболее распространенные:

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

Как справиться с недообучением — регрессия ядра

Мы обсудили, что делать, когда модель начинает переобучать, но что делать, если модель не соответствует? В нашем примере набора данных до сих пор наша модель демонстрировала различные признаки недообучения: нелинейные остатки и плохое значение R² в относительно простом наборе данных. Наиболее распространенный способ борьбы с недообучением — использование ядра. Ядро — это функция плотности, которая удовлетворяет трем основным свойствам:

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

Однако, если бы мы перенесли данные в более высокое измерение (как мы видим справа), теперь существует гиперплоскость, способная классифицировать данные.

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

Надеюсь, теперь я убедил вас в силе проецирования переменных наших признаков в более высокое измерение! Однако теперь возникает вопрос, как мы это делаем? Во-первых, нам нужно определить функцию, обычно обозначаемую как phi, которая отображает наши переменные в многомерное входное пространство. В регрессии ядра это выполняется с помощью функций ядра. Одним из самых популярных и основных ядер является полиномиальное ядро, которое просто возводит переменные признаков в степень. Возьмем, к примеру, простой случай, когда у нас есть только две переменные: x1 и x2; затем мы хотим сопоставить это с пространством более высокого измерения, просто используя полиномиальное ядро ​​со степенью 2:

Как видно из вышеизложенного, мы сопоставили наши исходные данные x1 и x2 с более высоким измерением, используя фи-функцию с полиномиальной степенью 2. Единственная проблема заключается в том, что теперь наша временная сложность пропорциональна мощности нашего полинома, О (к ^ р). Мы можем уменьшить эту сложность с помощью Kernel Trick. Во-первых, давайте пересчитаем нашу метрику потерь/ошибок, используя phi(x). Обратите внимание, что регрессия ядра использует регрессию гребня, так как коэффициенты имеют тенденцию быть чрезвычайно большими, поэтому этот метод обычно называют регрессия ядра гребня:

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

Как видите, когда мы уменьшаем нашу функцию потерь с новым значением бета, мы получаем phi(x_i)*phi(x_j), где phi(x) — операция O(k^p), что делает эту процедуру очень простой. трудоемкая операция. Однако хитрость заключается в том, что

Чтобы привести конкретный пример, давайте применим это к нашей предыдущей функции ядра, многочлену степени двойки:

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

Как видно из вышеизложенного, формат функции потерь очень похож на метод наименьших квадратов, за исключением того, что здесь K=X, а альфа=бета. Чтобы найти оптимальную бета-версию, мы сначала находим оптимальное решение для альфа-версии, а затем подключаем ее к бета-версии!

Временная сложность стандартного метода наименьших квадратов равна O(k³), но теперь наша матрица представляет собой матрицу размера n на n, поскольку K равно n на n; следовательно, временная сложность регрессии ядра составляет O(n³), что чрезвычайно сложно с вычислительной точки зрения при наличии большого количества данных! Обычное решение состоит в том, чтобы просто взять данные из общего набора данных, чтобы n было небольшим.

Еще один гиперпараметр, который необходимо настроить для регрессии ядра, — это выбор используемой функции ядра. Наиболее распространены следующие три:

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

Теперь, когда мы обсудили теоретические основы, давайте применим регрессию хребта ядра к нашей проблеме! В этом примере я продемонстрирую только полиномиальное ядро, поскольку оно является наиболее распространенным. Поскольку в Kernel Ridge также есть лямбда/штраф, я покажу влияние увеличения штрафа на набор данных для тестирования. Обратите внимание, что на практике это нужно на проверочном наборе, а не на тестировании.

Как видно из графика выше, увеличение штрафного члена лямбда фактически уменьшает значение R² как при тестировании, так и при обучении; однако на практике это может быть не так, поэтому всегда проверяйте разные значения регуляризации. Однако сразу же мы видим, что использование регрессии ядра увеличило R² в тестовом наборе данных с 0,76 до 0,83, а это означает, что наша модель теперь объясняет примерно 83% изменчивости целевой переменной, немного лучше, чем 76%. Теперь давайте рассмотрим остаточный график в наборе обучающих данных по сравнению со стандартной линейной регрессией:

Как видно из вышеизложенного, наш график остатков для хребта Кернел (справа) определенно выравнивает дисперсию остатков до константы для значений Y между 7 и 9; однако чрезвычайно большие остатки для значений Y между 9 и 10,5 все еще существуют; что указывает на то, что наша модель не соответствует некоторым из этих точек.

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

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

Однако вы можете подумать про себя: если регрессия ядра — это метод черного ящика, потому что проекция на более высокое измерение суммируется до одного значения между экземплярами данных, почему бы нам не спроецировать наше пространство признаков вручную? Например, предположим, что у нас есть следующее пространство признаков с тремя переменными, и мы проецируем его на полином второй степени:

Теперь мы спроецировали наше исходное измерение данных на более высокое измерение, что позволило нам выполнить гребневую регрессию, чтобы получить бета-коэффициенты белого ящика! Однако проблема заключается в том, что в нашем выводе методом наименьших квадратов мы предполагаем, что (X ^ T * X) обратимо, что предполагает линейную независимость X, то есть ни один столбец не является комбинацией другого; но мы можем ясно видеть, что наши новые спроецированные данные представляют собой линейную комбинацию измерения исходных данных! Таким образом, чем больше многомерных членов мы добавляем, тем больше вероятность того, что обратное не существует. Регрессия ядра избегает этой проблемы, поскольку она проецирует точечный продукт между экземплярами данных, где мы предполагаем, что экземпляры данных выбираются независимо.

Машины опорных векторов

В качестве последнего метода в этом глубоком погружении в регрессионный анализ мы рассмотрим близкий аналог регрессии Kernel Ridge, машины опорных векторов (SVM). Чтобы дать базовое представление о SVM, давайте переключимся на цель классификации, где мы хотим найти границу решения для классификации двух групп, и у нас есть три возможные модели:

Проблема в том, что все три границы решений правильно классифицируют все точки, поэтому теперь возникает вопрос, какая из них лучше? Идеальной моделью будет красная линия, так как она не слишком близка к классу 1 или классу 2. SVM решает эту проблему, добавляя запас вокруг границы решения, обычно называемый Опорными векторами:

Добавляя эти опорные векторы, наша модель имеет возможность «прочувствовать» данные, чтобы найти границу решения, которая может минимизировать ошибку в пределах этих полей опорных векторов. Существует два типа SVM: мягкая маржа и жесткая маржа. Hard Margin заставляет модель находить границу решения таким образом, что ни один экземпляр данных не находится внутри полей опорного вектора; тогда как Soft Margin позволяет экземплярам находиться внутри полей. Hard Margin работает только с линейно классифицируемыми данными и чрезвычайно чувствителен к выбросам, поэтому Soft Margin является наиболее распространенным типом SVM.

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

Однако построение функции «Потери/ошибки» отличается от предыдущего, так как мы хотим минимизировать бета-коэффициенты, чтобы обеспечить Равномерность. переоснащение. Кроме того, мы также хотим минимизировать остаточную ошибку, чтобы она была меньше ширины поля, обозначаемой как эпсилон:

Однако проблема заключается в том, что для данного эпсилон может не существовать модели, удовлетворяющей этому условию (жесткая маржа), что приводит к суррогатной функции, использующей незначительные переменные (вызываемые Мягкое поле):

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

Поскольку SVM использует матрицу данных X, нелинейное отображение можно использовать с помощью функций ядра для получения нелинейных регрессионных плоскостей. Я собираюсь пропустить математику, стоящую за этим, поскольку она становится запутанной и сложной; однако идея такая же, как упоминалось выше для Kernel Ridge. Приятно то, что трюк ядра все еще применим и здесь, что приводит к экономии времени и вычислений. Теперь, когда мы поговорили о теоретической стороне SVM, давайте применим ее к нашей проблеме!

Как и в случае с регрессией Kernel Ridge, существует целый ряд возможных функций ядра, из которых на этот раз я собираюсь протестировать три: полиномиальную, RBF и линейную. Кроме того, есть еще два важных гиперпараметра, которые нужны SVM, C и epsilon. Эпсилон — это ширина поля, а С — член регуляризации. На практике изменяется только член регуляризации C, так как изменение ширины поля резко приведет к плохим результатам. Здесь у нас есть три ядра с параметрами по умолчанию при различных значениях C, оцененных на тестовом наборе.

Как мы видим, для этого конкретного набора данных, увеличивая значение C, почти все три ядра увеличивают значение R² на тестовом наборе. Мы можем видеть, что ядро ​​RBF работает лучше всего, поэтому давайте рассмотрим его результаты при C = 100 немного подробнее:

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

К сожалению, как и в случае регрессии Kernel Ridge, поскольку SVM находит свои коэффициенты на основе ядер, а не переменных признаков, интерпретация того, как модель достигла своего прогноза, теряется, что делает SVM методом черного ящика.

Заключение

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

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

В ситуации, когда наша модель имела низкую ошибку обучения, но все же высокую ошибку тестирования, нам нужно было включить регуляризацию, чтобы предотвратить переобучение. Мы обсудили три наиболее распространенных типа регуляризации: коньковый, лассо и эластичная сеть. Регуляризация Ridge уменьшает значения коэффициентов, в то время как Lasso сводит некоторые коэффициенты к нулю, а Elastic Net стремится их согласовать.

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

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

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