Гребневая(ридж) регрессия и регрессия Лассо и их реализация с помощью Python
В этой статье я расскажу вам о гребневой регрессии и регрессии Лассо в машинном обучении и о том, как реализовать ее с помощью языка программирования Python.
Гребневая(ридж) модель регрессии и модель регрессии Лассо – это регуляризованные линейные модели, хороший способ уменьшить переобучение и упорядочить модель: чем меньше у нее степеней свободы, тем сложнее будет переобучить данные. Простой способ регуляризации полиномиальной модели – уменьшить количество степеней полинома.
Для линейной модели регуляризация обычно выполняется путем ограничения весов модели. А сейчас мы рассмотрим гребневую регрессию и регрессию Лассо, которые реализуют различные способы ограничения весов.
Гребневая (ридж) регрессия
Гребневая(ридж) регрессия – это регуляризованная версия линейной регрессии. Она заставляет алгоритм обучения не только соответствовать данным, но и сохранять веса модели как можно меньшими.
Обратите внимание, что срок начисления следует добавлять к функции затрат только во время обучения. После обучения модели вы хотите использовать нерегулируемую меру производительности для оценки производительности модели.
Регрессия Лассо
Наименьшее абсолютное сжатие и регрессия оператора выбора (обычно называется регрессия Лассо) – это еще одна регуляризованная версия линейной регрессии: так же, как пиковая регрессия, она добавляет член регуляризации к функции стоимости, но использует норму ℓ1 весового вектора вместо половины квадрата нормы ℓ2.
Гребневая (ридж) регрессия и регрессия Лассо с Python
Как и в других задачах, в этой задаче, чтобы показать реализацию гребневой регрессии и регрессии Лассо с Python, я начну с импорта необходимых пакетов и модулей Python:
import pandas as pd import numpy as np import matplotlib.pyplot as plt
А теперь давайте импортируем данные, проведем очистку и посмотрим, как выглядят данные, с которыми мы собираемся работать. Вы можете скачать набор данных, который я использую в этой задаче, отсюда:
data = pd.read_csv("Advertising.csv") print(data.head())
Результат:
Unnamed: 0 TV Radio Newspaper Sales
0 1 230.1 37.8 69.2 22.1
1 2 44.5 39.3 45.1 10.4
2 3 17.2 45.9 69.3 9.3
3 4 151.5 41.3 58.5 18.5
4 5 180.8 10.8 58.4 12.9
Теперь удалим безымянный столбец:
data.drop(["Unnamed: 0"], axis=1, inplace=True)
Сейчас у нас всего три рекламных медиа, и наша целевая переменная – продажи. Давайте посмотрим, как каждая переменная влияет на продажи, и для этого создадим диаграмму рассеяния. Сначала мы создаем вспомогательную функцию для построения диаграммы рассеяния:
def scatter_plot(feature, target): plt.figure(figsize=(16, 18)) plt.scatter(data[feature], data[target], c='black' ) plt.xlabel("Money Spent on {} ads ($)".format(feature)) plt.ylabel("Sales ($k)") plt.show() scatter_plot("TV", "Sales") scatter_plot("Radio", "Sales") scatter_plot("Newspaper", "Sales")
Алгоритм множественной линейной регрессии
Модели гребневой(ридж) регрессии и регрессии Лассо являются способом регуляризации линейных моделей, но нам сначала нужно подготовить линейную модель. Итак, давайте рассмотрим код для подготовки модели множественной линейной регрессии:
from sklearn.model_selection import cross_val_score from sklearn.linear_model import LinearRegression xs = data.drop(["Sales"], axis=1) y = data["Sales"].values.reshape(-1,1) linreg = LinearRegression() MSE = cross_val_score(linreg, xs, y, scoring="neg_mean_squared_error", cv=5) mean_MSE = np.mean(MSE) print(mean_MSE)
Теперь нам нужно посмотреть, что лучше: гребневая(ридж) регрессия или регрессия Лассо.
Гребневая(ридж) регрессия
Для алгоритма гребневой(ридж) регрессии я буду использовать модель GridSearchCV, предоставленную Scikit-learn, которая позволит нам автоматически выполнить 5-кратную перекрестную проверку, чтобы найти оптимальное значение альфа.
Вот как выглядит код для алгоритма гребневой(ридж) регрессии:
# Ridge Regression from sklearn.model_selection import GridSearchCV from sklearn.linear_model import Ridge ridge = Ridge() parameters = {"alpha":[1e-15, 1e-10, 1e-8, 1e-4, 1e-3, 1e-2, 1, 5, 10, 20]} ridge_regression = GridSearchCV(ridge, parameters, scoring='neg_mean_squared_error', cv=5) ridge_regression.fit(xs, y)
И тогда мы можем легко найти лучший параметр и лучшую MSE, используя следующие команды:
print(ridge_regression.best_params_) print(ridge_regression.best_score_)
Результат:
{‘alpha’: 20}
-3.0726713383411424
Регрессия Лассо
Для регрессии Лассо нам также необходимо следовать тому же процессу, что и для гребневой(ридж) регрессии. Вот как выглядит код:
from sklearn.linear_model import Lasso lasso = Lasso() parameters = {"alpha":[1e-15, 1e-10, 1e-8, 1e-4, 1e-3, 1e-2, 1, 5, 10, 20]} lasso_regression = GridSearchCV(lasso, parameters, scoring='neg_mean_squared_error', cv=5) lasso_regression.fit(xs, y) print(lasso_regression.best_params_) print(lasso_regression.best_score_)
Результат:
{‘alpha’: 1}
-3.041405896751369
Надеюсь, теперь вы знаете, как реализовать гребневую(ридж) регрессию и регрессию Лассо в машинном обучении с помощью языка программирования Python. В этом случае лучшим методом настройки будет лассо со значением регуляризации, равным 1.
Надеюсь, вам понравилась эта статья о том, как реализовать алгоритмы гребневой(ридж) регрессии и регрессии Лассо в машинном обучении с помощью языка программирования Python.