Примечание
Перейти в конец, чтобы скачать полный код примера или запустить этот пример в браузере с помощью JupyterLite или Binder.
Коэффициенты Ridge в зависимости от L2-регуляризации
Модель, которая переобучается, слишком хорошо усваивает обучающие данные, улавливая как основные закономерности, так и шум. Однако при применении к данным, которые ей ранее не встречались, выявленные зависимости могут не сохраниться. Обычно это становится заметно, когда мы проверяем прогнозы обученной модели на тестовых данных и видим, что статистические показатели качества значительно хуже, чем на обучающих данных.
Один из способов справиться с переобучением — регуляризация. В линейных моделях для этого можно штрафовать большие веса (коэффициенты), заставляя модель уменьшать все коэффициенты. Регуляризация снижает зависимость модели от отдельных сведений, полученных из обучающих выборок.
В этом примере показано, как L2-регуляризация в регрессии Ridge влияет на качество модели за счёт добавления к функции потерь штрафного слагаемого, растущего вместе с коэффициентами \(\beta\).
Функция потерь с регуляризацией задаётся следующим образом: \(\mathcal{L}(X, y, \beta) = \| y - X \beta \|^{2}_{2} + \alpha \| \beta \|^{2}_{2}\)
Здесь \(X\) — входные данные, \(y\) — целевая переменная, \(\beta\) — вектор коэффициентов, соответствующих признакам, а \(\alpha\) — сила регуляризации.
Функция потерь с регуляризацией помогает найти баланс между точным предсказанием обучающей выборки и предотвращением переобучения.
В этой функции потерь левая часть (например, \(\|y - X\beta\|^{2}_{2}\)) измеряет квадрат разности между фактическим значением целевой переменной \(y\) и предсказанными значениями. Минимизация только этого слагаемого может привести к переобучению: модель может стать слишком сложной и чувствительной к шуму в обучающих данных.
Чтобы устранить переобучение, регуляризация Ridge добавляет к функции потерь ограничение, называемое штрафным слагаемым (\(\alpha \| \beta\|^{2}_{2}\)). Это слагаемое представляет собой сумму квадратов коэффициентов модели, умноженную на силу регуляризации \(\alpha\). Такое ограничение не позволяет отдельному коэффициенту \(\beta_{i}\) принимать чрезмерно большие значения и способствует уменьшению коэффициентов и более равномерному распределению их значений. При больших значениях \(\alpha\) коэффициенты стремятся к нулю. Однако чрезмерно большое значение \(\alpha\) может привести к недообучению модели, которая не сможет выявить важные закономерности в данных.
Таким образом, функция потерь с регуляризацией объединяет слагаемое, отвечающее за точность предсказаний, и штрафное слагаемое. Изменяя силу регуляризации, специалисты могут настраивать степень ограничений на веса и обучать модель, способную хорошо обобщать данные, которые ей ранее не встречались, не допуская переобучения.
# Authors: The scikit-learn developers # SPDX-License-Identifier: BSD-3-Clause
Цель этого примера
Чтобы показать, как работает регуляризация Ridge, мы создадим набор данных без шума. Затем обучим модели с регуляризацией при разных значениях силы регуляризации (\(\alpha\)) и построим графики коэффициентов обученных моделей и среднеквадратичной ошибки между ними и исходными значениями в зависимости от силы регуляризации.
Создание набора данных без шума
Мы создадим учебный набор данных из 100 образцов и 10 признаков, подходящий для задачи регрессии. Из 10 признаков 8 информативны и влияют на результат регрессии, а оставшиеся 2 не влияют на целевую переменную (их истинные коэффициенты равны 0). Обратите внимание: в этом примере данные не содержат шума, поэтому можно ожидать, что наша регрессионная модель точно восстановит истинные коэффициенты w.
from sklearn.datasets import make_regression
X, y, w = make_regression(
n_samples=100, n_features=10, n_informative=8, coef=True, random_state=1
)
# Obtain the true coefficients
print(f"The true coefficient of this regression problem are:\n{w}")
The true coefficient of this regression problem are: [38.32634568 88.49665188 0. 29.75747153 0. 19.08699432 25.44381023 38.69892343 49.28808734 71.75949622]
Обучение регрессора Ridge
Мы используем Ridge — линейную модель с L2-регуляризацией. Мы обучаем несколько моделей, задавая каждой новое значение параметра модели alpha. Это положительная константа, на которую умножается штрафное слагаемое; она определяет силу регуляризации. Для каждой обученной модели мы вычисляем ошибку между истинными коэффициентами w и коэффициентами, найденными моделью clf. Мы сохраняем найденные коэффициенты и рассчитанные для них ошибки в списках, чтобы затем построить графики.
import numpy as np
from sklearn.linear_model import Ridge
from sklearn.metrics import mean_squared_error
clf = Ridge()
# Generate values for `alpha` that are evenly distributed on a logarithmic scale
alphas = np.logspace(-3, 4, 200)
coefs = []
errors_coefs = []
# Train the model with different regularisation strengths
for a in alphas:
clf.set_params(alpha=a).fit(X, y)
coefs.append(clf.coef_)
errors_coefs.append(mean_squared_error(clf.coef_, w))
Построение графиков обученных коэффициентов и среднеквадратичных ошибок
Теперь построим график 10 различных коэффициентов с регуляризацией в зависимости от параметра регуляризации alpha. Каждый цвет будет соответствовать отдельному коэффициенту.
Справа построим график изменения ошибок коэффициентов оценивателя в зависимости от регуляризации.
import matplotlib.pyplot as plt
import pandas as pd
alphas = pd.Index(alphas, name="alpha")
coefs = pd.DataFrame(coefs, index=alphas, columns=[f"Feature {i}" for i in range(10)])
errors = pd.Series(errors_coefs, index=alphas, name="Mean squared error")
fig, axs = plt.subplots(1, 2, figsize=(20, 6))
coefs.plot(
ax=axs[0],
logx=True,
title="Ridge coefficients as a function of the regularization strength",
)
axs[0].set_ylabel("Ridge coefficient values")
errors.plot(
ax=axs[1],
logx=True,
title="Coefficient error as a function of the regularization strength",
)
_ = axs[1].set_ylabel("Mean squared error")

Интерпретация графиков
На графике слева показано, как сила регуляризации (alpha) влияет на коэффициенты регрессии Ridge. При небольших значениях alpha (слабая регуляризация) коэффициенты близки к истинным значениям коэффициентов (w), использованным для создания набора данных. Это объясняется тем, что в искусственный набор данных не добавлялся шум. По мере увеличения alpha коэффициенты стремятся к нулю, постепенно уменьшая влияние признаков, которые ранее были более значимыми.
На графике справа показана среднеквадратичная ошибка (MSE) между коэффициентами, найденными моделью, и истинными коэффициентами (w). Она позволяет оценить, насколько модель Ridge соответствует истинной модели, породившей данные. Низкая ошибка означает, что найденные коэффициенты ближе к коэффициентам истинной порождающей модели. В этом случае, поскольку наш учебный набор данных не содержал шума, видно, что модель с самой слабой регуляризацией находит коэффициенты, наиболее близкие к истинным значениям (w) (ошибка близка к 0).
При небольшом значении alpha модель улавливает тонкие особенности обучающих данных, независимо от того, вызваны они шумом или действительно несут полезную информацию. По мере увеличения alpha наибольшие коэффициенты быстрее стремятся к нулю, и соответствующие признаки оказывают меньшее влияние на процесс обучения. Это может улучшить способность модели обобщать данные, которые ей ранее не встречались (если в них было много шума), но также создаёт риск снижения качества, если регуляризация слишком сильна по сравнению с уровнем шума в данных (как в этом примере).
В реальных задачах данные обычно содержат шум, поэтому выбор подходящего значения alpha крайне важен для достижения баланса между переобучением и недообучением модели.
Здесь мы увидели, что Ridge добавляет штраф к коэффициентам, помогая бороться с переобучением. Ещё одна проблема связана с наличием выбросов в обучающем наборе данных. Выброс — это точка данных, которая значительно отличается от остальных наблюдений. В частности, такие выбросы влияют на левое слагаемое функции потерь, рассмотренной выше. Некоторые другие линейные модели устойчивы к выбросам, например HuberRegressor. Подробнее об этом можно узнать в примере HuberRegressor и Ridge на наборе данных с большим количеством выбросов.
Общее время выполнения скрипта: (0 минут 0.668 секунды)
Связанные примеры
© 2007–2026 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.9/auto_examples/linear_model/plot_ridge_coeffs.html