Примечание
Перейти к концу для загрузки полного примера кода. или для запуска этого примера в вашем браузере через JupyterLite или Binder
Коэффициенты регрессии Риджа как функция 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\) и предсказанными значениями. Минимизация только этого члена может привести к переобучению, так как модель может стать слишком сложной и чувствительной к шуму в обучающих данных.
Для решения проблемы переобучения регуляризация Риджа добавляет ограничение, называемое членом штрафа, (\(\alpha \| \beta\|^{2}_{2}\)), к функции потерь. Этот член штрафа — сумма квадратов коэффициентов модели, умноженная на силу регуляризации \(\alpha\). Введя это ограничение, регуляризация Риджа препятствует тому, чтобы какой-либо отдельный коэффициент \(\beta_{i}\) принимал чрезмерно большое значение, и поощряет более мелкие и равномерно распределённые коэффициенты. Более высокие значения \(\alpha\) приближают коэффициенты к нулю. Однако чрезмерно высокое \(\alpha\) может привести к недообученной модели, которая не способна захватить важные закономерности в данных.
Следовательно, регуляризованная функция потерь объединяет член точности предсказания и член штрафа. Регулируя силу регуляризации, специалисты могут точно настроить степень ограничения, наложенного на веса, обучая модель, способную хорошо обобщать на независящие данные, избегая переобучения.
# Authors: The scikit-learn developers # SPDX-License-Identifier: BSD-3-Clause
Цель этого примера
Для демонстрации работы регуляризации Риджа мы создадим набор данных без шума. Затем мы обучим регрессионную модель с различной силой регуляризации (\(\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, линейную модель с 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) влияет на коэффициенты регрессии Риджа. Меньшие значения alpha (слабая регуляризация) позволяют коэффициентам более точно отражать истинные коэффициенты (w) используемые для генерации набора данных. Это связано с тем, что к нашему искусственному набору данных не добавлялся дополнительный шум. По мере увеличения alpha, коэффициенты стремятся к нулю, постепенно уменьшая влияние признаков, которые ранее были более значимыми.
График справа показывает среднеквадратичную ошибку (MSE) между коэффициентами, найденными моделью, и истинными коэффициентами (w). Он предоставляет меру, которая связана с тем, насколько точна наша модель Риджа по сравнению с истинной моделью генерации. Низкая ошибка означает, что она нашла коэффициенты, более близкие к коэффициентам истинной генеративной модели. В этом случае, поскольку наш набор данных был без шума, мы видим, что наименее регуляризованная модель получает коэффициенты, наиболее близкие к истинным коэффициентам (w) (ошибка близка к 0).
Когда alpha мало, модель улавливает мельчайшие детали обучающих данных, независимо от того, вызваны ли они шумом или реальной информацией. По мере увеличения alpha самые высокие коэффициенты уменьшаются быстрее, что делает соответствующие им признаки менее влиятельными в процессе обучения. Это может повысить способность модели обобщать на новые данные (если было много шума), но также существует риск потери производительности, если регуляризация станет слишком сильной по сравнению с количеством шума в данных (как в этом примере).
В реальных сценариях, где данные обычно включают шум, выбор соответствующего значения alpha становится решающим для достижения баланса между переобучением и недообучением модели.
Здесь мы увидели, что Ridge добавляет штраф к коэффициентам, чтобы бороться с переобучением. Другая проблема, которая возникает, связана с наличием выбросов в наборе обучающих данных. Выброс — это точка данных, которая значительно отличается от других наблюдений. Конкретно, эти выбросы влияют на левую часть функции потерь, которую мы показали ранее. Некоторые другие линейные модели сформулированы таким образом, чтобы быть устойчивыми к выбросам, такие как HuberRegressor. Вы можете узнать больше об этом в примере HuberRegressor против Ridge на наборе данных с сильными выбросами.
Общее время выполнения скрипта: (0 минут 0,698 секунды)
Похожие примеры
© 2007–2025 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.6/auto_examples/linear_model/plot_ridge_coeffs.html