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

Нам нужна наименьшая общая ошибка, то есть низкое смещение и низкая дисперсия.

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

Итак, что такое регуляризация и как она помогает решить эту проблему?

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

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

Чтобы справиться с этим, мы движемся к регуляризации. Когда мы используем регуляризацию, мы добавляем штрафной член к функции стоимости модели. Функция стоимости будет следующей: Стоимость = RSS + Штраф. Добавление этого штрафного члена в функцию стоимости помогает подавить или уменьшить величину коэффициентов модели до 0, тем самым предотвращая риск переобучения.

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

Существует два основных метода регуляризации: Ridge и Lasso.

Ридж-регрессия

В OLS мы получаем лучшие коэффициенты, минимизируя остаточную сумму квадратов (RSS). Точно так же и с регрессией Риджа мы оцениваем коэффициенты модели, но путем минимизации другой функции стоимости. Эта функция стоимости добавляет к RSS штрафной срок. Штрафной срок равен лямбда, умноженному на сумму квадратов коэффициентов модели.

Следовательно, при подгонке регрессионной модели Риджа, поскольку нам нужно найти коэффициенты модели, которые минимизируют всю стоимость (RSS + Penalty), это приведет к уменьшению коэффициентов модели до 0.

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

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

# list of alphas to tune -
params = {'alpha': [0.0001, 0.001, 0.01, 0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 
                    0.7, 0.8, 0.9, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 
                    9.0, 10.0, 20, 50, 100, 500, 1000 ]}
ridge = Ridge()
model_cv = GridSearchCV(estimator = ridge, param_grid = params, 
                        scoring= 'mean_absolute_error',cv = 5)

model_cv.fit(X_train, y_train)
print(model_cv.best_params_)
>>>{'alpha': 10.0}

Лассо-регрессия

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

Как и в случае регрессии Риджа, регрессия Лассо сужает оценки коэффициентов до 0. Однако есть одно отличие. С Лассо штраф толкает некоторые оценки коэффициентов точно к 0.

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

# list of alphas to tune -
params = {'alpha': [0.0001, 0.001, 0.01, 0.05, 0.1,0.2, 0.3, 0.4, 0.5,
                    0.6, 0.7, 0.8, 0.9, 1.0, 2.0, 3.0,4.0, 5.0, 6.0, 7.0,
                    8.0, 9.0, 10.0, 20, 50, 100, 500, 1000 ]}
lasso = Lasso()
model_cv = GridSearchCV(estimator = lasso, param_grid = params,
                        scoring= 'mean_absolute_error', cv = folds)

model_cv.fit(X_train, y_train)
print(model_cv.best_params_)
>>>{'alpha': 100.0}

Почему гребневая регрессия не уменьшает некоторые коэффициенты до нуля?

Ридж-регрессия

Пока мы решим это уравнение только для одного β, а позже вы сможете обобщить его: Итак, наше уравнение для одного β принимает вид:

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

Частные производные:

Если вы обратите внимание на знаменатель, он станет равным нулю, только если λ→∞, так как мы добавляем некоторое значение λ. И поэтому значение β будет как можно меньше, но не станет равным нулю.

Лассо-регрессия

Пока мы решим это уравнение только для одного β, а позже вы сможете обобщить его. Итак, наше уравнение для одного β принимает вид:

Здесь я рассмотрел положительное значение β. Наша цель — минимизировать приведенное выше уравнение, для этого приравняем его к нулю и возьмем производные по β

Частные производные:

Если вы посмотрите на числитель, он станет равным нулю, так как мы вычитаем некоторое значение λ. Поэтому значение β будет установлено равным нулю.

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

Например, регуляризация Риджа и Лассо обычно не применяется к:

  1. Нейронные сети. Нейронные сети уже оснащены собственным механизмом контроля переобучения, такого как отсев, и добавление члена регуляризации может не оказать существенного влияния.
  2. Деревья решений и случайные леса. Деревья решений и случайные леса не имеют коэффициентов, которые можно упорядочить, поэтому Ридж и Лассо не применимы напрямую. Однако существуют варианты этих алгоритмов, которые включают регуляризацию, например Gradient Boosting.
  3. K-ближайшие соседи (KNN): KNN — это непараметрический алгоритм, который не имеет коэффициентов, которые можно было бы упорядочить.
  4. Наивный Байес: Наивный Байес — это простой вероятностный алгоритм, который не имеет коэффициентов, которые можно было бы упорядочить.