正则化对线性回归问题的可视化效果

数据挖掘 机器学习 Python 线性回归 正则化
2021-09-26 02:48:49

我想整理一个示例笔记本来演示正则化如何对简单的线性回归等简单模型产生影响。但是,在执行以下脚本时,我注意到LinearRegression()Ridge()模型都返回相同coef_intercept_回归图,因此无论我如何更改正则化强度。

该数据是一个小型数据集,其中包含一组国家(n=40)的 2021 年人均 GDP(以美元计)和生活满意度得分。使用回归线绘制的数据集如下所示:

在此处输入图像描述

Aurélien Géron 的 Hands-On Machine Learning with Scikit-Learn and TensorFlow 一书(第 27 页)中,我阅读了以下内容:

约束模型以使其更简单并降低过度拟合的风险称为正则化。例如,我们之前定义的线性模型有两个参数,θ0θ1这为学习算法提供了两个自由度来使模型适应训练数据:它可以调整直线的高度 ( θ0 ) 和斜率 ( θ1 )。(...) 如果我们允许算法修改 θ1 但我们强制它保持较小,那么学习算法将产生一个比两个自由度更简单的模型,但比只有一个自由度更复杂。

基于此,我了解到通过包含alpha超参数(即正则化 lambda),我实质上对 和 的平方和施加了额外的约束coef_intercept_从而迫使模型在训练期间对其进行调整,因为新的成本函数现在包括 lambda 项。在我当前的设置中,coef_(斜率)在 1e-5 的范围内,而intercept_在 5.75 左右。它们的平方和约为 33。我希望正则化模型会减少 ,intercept_因为这对平方和的影响要大得多coef_然而,当Ridge(alpha=...)以任何alpha值运行时,学习到的参数(以及回归图)与非正则化简单线性回归的参数相同。

我在这里误解了一些基本的东西吗?我怎么能看到正则化对这样一个模型的影响?

我的完整代码:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression, Ridge

X = np.c_[df['GDP_2021']]
y = np.c_[df['LifeSatisf']]

model1 = LinearRegression()
model1.fit(X, y)

model2 = Ridge(alpha=100)
model2.fit(X, y)

print("Coefs model 1: ", model1.coef_, model1.intercept_)
print("Coefs model 2: ", model2.coef_, model2.intercept_)

x_new = np.linspace(0, 140000, 10000)[:, np.newaxis]
y_1 = model1.predict(x_new).flatten().tolist()
y_2 = model2.predict(x_new).flatten().tolist()

plt.figure(figsize=(10, 3))
ax = plt.axes()
ax.scatter(df['GDP_2021'], df['LifeSatisf']);
ax.plot(x_new, y_1, c='r', linestyle='--');
ax.plot(x_new, y_2, c='b', linestyle='--');
plt.title("Life satisfaction vs. GDP per capita regression models");
plt.xlabel("GDP per capita (2021) [US$]");
plt.ylabel("Life satisfaction [-]");

数据集为逗号分隔文件:

Country,LifeSatisf,GDP_2021
Australia,7.3,62618.59
Austria,7.1,53793.37
Belgium,6.9,50412.71
Canada,7.4,52791.23
Czech Republic,6.7,25806.38
Denmark,7.6,67919.59
Finland,7.6,53522.57
France,6.5,45028.27
Germany,7.0,50787.86
Greece,5.4,19827.16
Hungary,5.6,18527.59
Iceland,7.5,68843.65
Ireland,7.0,102394.02
Italy,6.0,35584.88
Japan,5.9,40704.3
Korea,5.9,35195.52
Luxembourg,6.9,131301.6
Mexico,6.5,9967.39
Netherlands,7.4,57714.88
New Zealand,7.3,48348.99
Norway,7.6,82244.23
Poland,6.1,17318.5
Portugal,5.4,24457.14
Slovak Republic,6.2,21383.29
Spain,6.3,30536.86
Sweden,7.3,58639.19
Switzerland,7.5,93515.48
Turkey,5.5,9406.58
United Kingdom,6.8,46200.26
United States,6.9,69375.38
Brazil,6.4,7741.15
Chile,6.5,16799.37
Estonia,5.7,27100.74
Israel,7.2,49840.25
Latvia,5.9,19538.9
Russia,5.8,11273.24
Slovenia,5.9,28939.27
South Africa,4.7,6861.17
Colombia,6.3,5892.14
Lithuania,5.9,22411.65
1个回答

您对正则化的理解是完全正确的,只是您使用的 alpha 值似乎太低,以至于此示例无法产生任何有意义的影响。将 alpha 的值增加到更大的值(10e9对于下面的示例)确实显示了正则化对模型参数的影响: 在此处输入图像描述