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

Освежить

Вот иллюстрация, чтобы вкратце вспомнить, как выглядит типичная регрессионная модель.

На иллюстрации выше

  • y - значение зависимой переменной
  • β₀ - пересечение линии по оси Y означает, что линия пересекает ось Y
  • β ₁ - наклон или уклон линии.
  • x - значение независимой переменной.
  • u - остаточный шум или шум, вызванный необъяснимыми факторами.

Функция стоимости и градиентный спуск

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

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

Немного изменив приведенное выше уравнение, мы получим следующее уравнение:

где J - обозначение стоимости, а θ - параметр, h (θ (x (i))) - прогнозируемое значение, а Y (i) - фактическое значение i-го наблюдения.

Наша цель - уменьшить функцию стоимости, что, в свою очередь, повышает точность.

Минимизация функции стоимости: градиентный спуск

Градиентный спуск - это эффективный алгоритм оптимизации, который пытается найти локальный или глобальный минимум функции.

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

Подгонка и раскол

Недостаточное и переобучение

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

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

На следующей диаграмме мы видим, что подгонка линейной регрессии (прямая линия на рис. 1) не соответствует данным, то есть приведет к большим ошибкам даже в обучающей выборке. Использование полиномиальной подгонки на рис. 2 является сбалансированным, то есть такая подгонка может хорошо работать на обучающем и тестовом наборах, в то время как на рис. 3 подгонка приведет к низким ошибкам в обучающем наборе, но не будет хорошо работать на тестовом наборе.

Расщепление

Часто путают концепцию разделения данных при моделировании.

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

Что такое перекрестная проверка и почему мне это нужно?

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

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

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

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

Регуляризация - что, почему и как?

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

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

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

Регуляризация обычно полезна в следующих ситуациях:

  1. Большое количество переменных - например, для нескольких столбцов ACV в данных о продажах.
  2. Низкое соотношение количества наблюдений к количеству переменных
  3. Высокая мультиколлинеарность

Давайте рассмотрим два способа упорядочения вашей модели.

L1 Регуляризация - регрессия Лассо

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

Таким образом, функция стоимости в регрессии LASSO принимает следующий вид:

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

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

Регуляризация L2 - регрессия гребня

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

Таким образом, функция стоимости регрессии гребня равна

Регрессия гребня только подавляет величину бета-версии, не отбрасывая никакую переменную.

Выбирая λ

Если мы выберем лямбда = 0, мы вернемся к оценкам стандартной линейной регрессии (МНК). Если лямбда выбрана очень большой, это приведет к недостаточной подгонке. Таким образом, очень важно определить желаемое значение лямбды.

Эластичная сеть - Святой Грааль?

Регрессия Elastic Net предпочтительнее, чем регрессия гребня и лассо, когда мы имеем дело с сильно коррелированными независимыми переменными.

Это комбинация лассо и регрессии гребня. Функция стоимости в случае эластичной чистой регрессии:

Elasticnet имеет дополнительный параметр настройки, называемый α. Значение α, равное 0,5, дает равный компромисс между гребнем и лассо.

Когда α = 1, модель полностью лассо, а α = 0 подразумевает полностью гребенчатую модель.

Что мне тогда использовать?

Не существует универсального решения для всех проблем. Однако ElasticNet максимально приближен к такому решению.

Ridge: так как Ridge подавляет только бета-версии, все его бета-версии будут отличными от нуля. Это означает, что все переменные используются для прогнозирования ответа.

Лассо. В отличие от риджа, лассо обнуляет многие коэффициенты. Это означает, что только часть наших исходных переменных используется для прогнозирования ответа. Таким образом, лассо выполняет прогноз и выбор переменных (т. Е. Находит наши «важные» / «релевантные» переменные)

Эластичная сетка: лассо великолепно. Он выполняет прогнозирование в многомерных ситуациях (большое количество переменных, высокая корреляция) и выполняет выбор переменных (т. Е. Устанавливает определенные бета-компоненты на ноль). Но есть проблема. Если набор переменных-предикторов сильно коррелирован, то лассо имеет тенденцию выбирать одну из коррелированной группы; конкретная выбранная переменная может не иметь большого значения. ElasticNet заставит группы коррелированных переменных входить и выходить вместе, помогая интерпретации - таким образом, давая лучшее из обоих миров. Одна из возможных проблем с ElasticNet заключается в том, что поиск гиперпараметров (альфа и лямбда) требует больших вычислений.

Итог: если у вас большие вычислительные возможности, то лучше всего использовать ElasticNet и получить наиболее надежную модель.

Реализация в R

Этот пост стал слишком длинным, чтобы содержать подробную реализацию Elastic net на R / Python. Я расскажу об этом в отдельном посте.

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

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

Сообщите нашей команде @ Decoding Data свои мысли, вопросы или предложения в разделе комментариев ниже.