Введение

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

В этой статье мы узнаем о регуляризации, двух нормах регуляризации и методах регрессии, основанных на этих методах регуляризации.

Оглавление

  1. Переобучение и регуляризация
  2. Регуляризация L1 или LASSO
  3. Регуляризация L2 или гребень
  4. ЛАССО Регрессия
  5. Ридж-регрессия
  6. Регрессия ElasticNet
  7. Выводы

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

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

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

На практике вы можете проверить, является ли регрессионная модель переоснащением или нет, с помощью RMSE. Хорошая модель имеет аналогичный RMSE для поезда и тестовых наборов. Если разница слишком велика, мы можем сказать, что модель переобучается тренировочному набору. Существует два типа методов добавления штрафов к функции стоимости: норма L1 или термин LASSO и норма L2 или термин Ridge.

Регуляризация L1 или LASSO

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

Ниже приведено уравнение функции стоимости с штрафом L1:

Здесь альфа – это множитель.

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

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

Ниже приведено уравнение функции стоимости с штрафом L2:

Здесь альфа – это множитель.

ЛАССО Регрессия

Регрессия LASSO – это линейная модель, построенная с применением штрафного члена L1 или LASSO. Давайте посмотрим, как построить модель регрессии LASSO в Python.

Импорт библиотек

import numpy as np 
import pandas as pd 
from sklearn import metrics 
from sklearn.linear_model import Lasso

Импорт набора данных

df_train = pd.read_csv('train.csv') 
df_test = pd.read_csv('test.csv')

Набор данных взят с Kaggle.

Удалить дубликаты, если они есть

df_train = df_train.dropna() 
df_test = df_test.dropna()

Указание переменных x_train, x_test, y_train, y_test для регрессии

x_train = df_train['x'] 
x_train = x_train.values.reshape(-1,1) 
y_train = df_train['y'] 
y_train = y_train.values.reshape(-1,1) 
x_test = df_test['x'] 
x_test = x_test.values.reshape(-1,1) 
y_test = df_test['y'] 
y_test = y_test.values.reshape(-1,1)

Построение регрессионной модели LASSO

lasso = Lasso()

Подгонка модели к поезду

lasso.fit(x_train, y_train)

Вычисление среднеквадратичной ошибки поезда для регрессии Лассо

print("Lasso Train RMSE:", np.round(np.sqrt(metrics.mean_quared_error(y_train, lasso.predict(x_train))), 5))

Вычисление среднеквадратичной ошибки теста для регрессии Лассо

print("Lasso Test RMSE:", np.round(np.sqrt(metrics.mean_quared_error(y_test, lasso.predict(x_test))), 5))

Собираем все вместе

import numpy as np 
import pandas as pd 
from sklearn import metrics 
from sklearn.linear_model import Lasso 
df_train = pd.read_csv('train.csv') 
df_test = pd.read_csv('test.csv') 
df_train = df_train.dropna() 
df_test = df_test.dropna() 
x_train = df_train['x'] 
x_train = x_train.values.reshape(-1,1) 
y_train = df_train['y'] 
y_train = y_train.values.reshape(-1,1) 
x_test = df_test['x'] 
x_test = x_test.values.reshape(-1,1) 
y_test = df_test['y'] 
y_test = y_test.values.reshape(-1,1) 
lasso = Lasso() 
lasso.fit(x_train, y_train) 
print("Lasso Train RMSE:", np.round(np.sqrt(metrics.mean_quared_error(y_train, lasso.predict(x_train))), 5)) 
print("Lasso Test RMSE:", np.round(np.sqrt(metrics.mean_quared_error(y_test, lasso.predict(x_test))), 5))

При выполнении этого кода мы получаем:

Мы можем настроить гиперпараметры модели LASSO, чтобы найти соответствующее альфа-значение, используя LassoCV или GridSearchCV.

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

Ридж-регрессия — это линейная модель, построенная с применением штрафа L2 или хребта. Давайте посмотрим, как построить модель регрессии Риджа в Python.

Импорт библиотек

import numpy as np 
import pandas as pd 
from sklearn import metrics 
from sklearn.linear_model import Ridge

Импорт набора данных

df_train = pd.read_csv('train.csv') 
df_test = pd.read_csv('test.csv')

Набор данных взят с Kaggle.

Удалить дубликаты, если они есть

df_train = df_train.dropna() 
df_test = df_test.dropna()

Указание переменных x_train, x_test, y_train, y_test для регрессии

x_train = df_train['x'] 
x_train = x_train.values.reshape(-1,1) 
y_train = df_train['y'] 
y_train = y_train.values.reshape(-1,1) 
x_test = df_test['x'] 
x_test = x_test.values.reshape(-1,1) 
y_test = df_test['y'] 
y_test = y_test.values.reshape(-1,1)

Регрессионная модель Building Ridge

ridge = Ridge()

Подгонка модели к поезду

ridge.fit(x_train, y_train)

Расчет среднеквадратичной ошибки поезда для гребневой регрессии

print("Ridge Train RMSE:", np.round(np.sqrt(metrics.mean_quared_error(y_train, ridge.predict(x_train))), 5))

Вычисление среднеквадратичной ошибки теста для гребневой регрессии

print("Ridge Test RMSE:", np.round(np.sqrt(metrics.mean_quared_error(y_test, ridge.predict(x_test))), 5))

Собираем все вместе

import numpy as np 
import pandas as pd 
from sklearn import metrics 
from sklearn.linear_model import Ridge 
df_train = pd.read_csv('train.csv') 
df_test = pd.read_csv('test.csv') 
df_train = df_train.dropna() 
df_test = df_test.dropna() 
x_train = df_train['x'] 
x_train = x_train.values.reshape(-1,1) 
y_train = df_train['y'] 
y_train = y_train.values.reshape(-1,1) 
x_test = df_test['x'] 
x_test = x_test.values.reshape(-1,1) 
y_test = df_test['y'] 
y_test = y_test.values.reshape(-1,1) 
ridge = Ridge() 
ridge.fit(x_train, y_train) 
print("Ridge Train RMSE:", np.round(np.sqrt(metrics.mean_quared_error(y_train, ridge.predict(x_train))), 5)) 
print("Ridge Test RMSE:", np.round(np.sqrt(metrics.mean_quared_error(y_test, ridge.predict(x_test))), 5))

При выполнении этого кода мы получаем:

Мы можем настроить гиперпараметры модели Ridge, чтобы найти соответствующее значение альфа-канала, используя RidgeCV или GridSearchCV.

Регрессия ElasticNet

Импорт библиотек

import numpy as np 
import pandas as pd from sklearn 
import metrics from sklearn.linear_model 
import ElasticNet

Импорт набора данных

df_train = pd.read_csv('train.csv') 
df_test = pd.read_csv('test.csv')

Удалить дубликаты, если они есть

df_train = df_train.dropna() 
df_test = df_test.dropna()

Указание переменных x_train, x_test, y_train, y_test для регрессии

x_train = df_train['x'] 
x_train = x_train.values.reshape(-1,1) 
y_train = df_train['y'] 
y_train = y_train.values.reshape(-1,1) 
x_test = df_test['x'] 
x_test = x_test.values.reshape(-1,1) 
y_test = df_test['y'] 
y_test = y_test.values.reshape(-1,1)

Построение регрессионной модели ElasticNet

enet = ElasticNet()

Подгонка модели к поезду

enet.fit(x_train, y_train)

Расчет RMSE поезда для регрессии ElasticNet

print("ElasticNet Train RMSE:", np.round(np.sqrt(metrics.mean_quared_error(y_train, enet.predict(x_train))), 5))

Расчет тестового среднеквадратичного отклонения для регрессии ElasticNet

print("ElasticNet Test RMSE:", np.round(np.sqrt(metrics.mean_quared_error(y_test, enet.predict(x_test))), 5))

Собираем все вместе

import numpy as np 
import pandas as pd 
from sklearn import metrics 
from sklearn.linear_model import ElasticNet 
df_train = pd.read_csv('train.csv') 
df_test = pd.read_csv('test.csv') 
df_train = df_train.dropna() 
df_test = df_test.dropna() 
x_train = df_train['x'] 
x_train = x_train.values.reshape(-1,1) 
y_train = df_train['y'] 
y_train = y_train.values.reshape(-1,1) 
x_test = df_test['x'] 
x_test = x_test.values.reshape(-1,1) 
y_test = df_test['y'] 
y_test = y_test.values.reshape(-1,1) 
enet = ElasticNet() 
enet.fit(x_train, y_train) 
print("ElasticNet Train RMSE:", np.round(np.sqrt(metrics.mean_quared_error(y_train, enet.predict(x_train))), 5)) 
print("ElasticNet Test RMSE:", np.round(np.sqrt(metrics.mean_quared_error(y_test, enet.predict(x_test))), 5))

Мы можем настроить гиперпараметры модели Ridge, чтобы найти соответствующее альфа-значение, используя ElasticNetCV или GridSearchCV.

Выводы

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

Первоначально опубликовано на https://www.analyticsvidhya.com 31 июля 2021 г.