Введение
Информация. Одним из методов преодоления переобучения является регуляризация. Регуляризация, как правило, штрафует коэффициенты, вызывающие переобучение модели. В регуляризации есть две нормы, которые можно использовать в соответствии со сценариями.
В этой статье мы узнаем о регуляризации, двух нормах регуляризации и методах регрессии, основанных на этих методах регуляризации.
Оглавление
- Переобучение и регуляризация
- Регуляризация L1 или LASSO
- Регуляризация L2 или гребень
- ЛАССО Регрессия
- Ридж-регрессия
- Регрессия ElasticNet
- Выводы
Переобучение и регуляризация
Переобучение модели происходит, когда модель «слишком хорошо учится» на данных поезда. Это может показаться преимуществом, но это не так. Когда модель перетренирована на обучающих данных, она хуже всего работает на тестовых данных или любых новых предоставленных данных. Технически модель изучает детали, а также шум данных о поезде. Это помешает производительности любых новых данных, предоставленных модели, поскольку изученные детали и шум не могут быть применены к новым данным. Это тот случай, когда мы говорим, что производительность модели неадекватна. Существует несколько способов избежать переобучения модели, таких как перекрестная проверка в 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 г.