python:形象说明什么是L2正则化,程序对比展示正则化的效果,介绍实际中正则化的常用方法

在机器学习中,我们训练模型时,希望模型既能很好地拟合训练数据,又不要过于复杂(防止过拟合)。正则化就是用来防止模型过拟合的一种技术。本文重点带着伙伴们厘清对正则化的认识,便于能够灵活应用。

一、正则化的定义及形象比喻

正则化的定义:通过保留全部特征变量,只是降低特征变量的系数值来避免过拟合的方法,我们称之为L2 正则化。听着绕口吧,给两个形象的比喻。

比喻1:想象你在学习跳舞(模型训练)。你的目标是在记住舞蹈动作(拟合训练数据)的同时,不要过度使用夸张的动作(防止过拟合)。L2正则化就像是教练在旁边提醒你:“动作要简洁,不要有太多多余的动作,保持优雅!”具体来说,教练会惩罚那些过于夸张的动作(即模型中过大的权重),这样你就会倾向于使用更柔和、幅度更小的动作(较小的权重),从而让整个舞蹈看起来更自然流畅(模型泛化能力更强)

比喻2:想象教小孩认动物。

不正则化:孩子看到斑点狗就死记"白底黑斑=狗",结果把奶牛也认成狗(过拟合)

L2正则化:要求孩子总结更本质的特征(如体型、叫声),即使看到新动物也能正确分类(泛化能力)

L2正则化就像给模型戴上一副"近视眼镜",防止模型过度关注训练数据。惩罚项相当于老师强调:"不要只看皮毛斑点,注意整体特征!"。通过合理使用正则化,可以显著提高模型的泛化能力。

二、机器学习中正则化的常用方法

方法实现方式最佳场景注意事项
L1正则化添加绝对值惩罚项(Lasso)特征选择/高维数据可能过度稀疏化权重
L2正则化添加平方惩罚项(Ridge)共线性数据/防止过拟合保留所有特征但缩小权重
弹性网络L1+L2组合高维且特征相关场景需调两个超参数
Dropout神经网络中随机丢弃神经元深度神经网络仅用于训练阶段
早停法验证集性能下降时停止训练迭代训练模型(如NN/GBDT)需监控验证集

三、python有无正则化程序及运行效果对比

下面我们用一个简单的线性回归例子,使用多项式拟合,来展示正则化(这里用L2正则化,即岭回归)和没有正则化的区别。我们将使用一个简单的二次函数加噪声生成数据,然后用一个高阶多项式(比如9次)去拟合。没有正则化时,模型会过拟合;而使用正则化后,模型会更平滑。

python程序源代码如下。运行效果在程序的下面。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression, Ridge
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei'] #解决中文不显示问题
# 在创建图形前设置字体
plt.rcParams['font.family'] = 'sans-serif'  # 使用无衬线字体
#plt.rcParams['font.sans-serif'] = ['Arial', 'DejaVu Sans', 'SimHei']  # 备选字体列表
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

# 生成带噪声的二次曲线数据
np.random.seed(42)
X = np.linspace(0, 1, 30)
y = 0.5 * X**2 + X + 2 + np.random.normal(0, 0.15, 30)

# 创建对比模型
model_raw = make_pipeline(PolynomialFeatures(degree=15),  # 故意用高次多项式诱发过拟合
                          LinearRegression())
model_l2 = make_pipeline(PolynomialFeatures(degree=15),
                         Ridge(alpha=0.8))  # L2正则化强度

# 训练模型
model_raw.fit(X[:, np.newaxis], y)
model_l2.fit(X[:, np.newaxis], y)

# 生成预测点
X_test = np.linspace(0, 1.2, 100)
y_raw = model_raw.predict(X_test[:, np.newaxis])
y_l2 = model_l2.predict(X_test[:, np.newaxis])

# 可视化对比
plt.figure(figsize=(10, 6))
plt.scatter(X, y, s=50, label='原始数据', zorder=3)
plt.plot(X_test, y_raw, 'r--', lw=2, label='无正则化(过拟合)')
plt.plot(X_test, y_l2, 'g-', lw=3, label='L2正则化')
plt.xlabel('X'), plt.ylabel('y')
plt.title('正则化 vs 无正则化 效果对比')
plt.legend(), plt.grid(alpha=0.3)
plt.show()

 

四、给应用者的一些实用建议

1.优先尝试L2正则化:大多数场景效果良好且稳定

2.数据预处理:正则化前务必做特征标准化(权重惩罚对尺度敏感)

3.警惕信号:当训练/验证误差差距过大时(>30%),应增强正则化

核心原则:正则化不是追求训练集完美,而是让模型学会抓住重点,如同培养善于举一反三的学生而非死记硬背的考试机器。

以上是本文的内容。

伙伴们点赞、收藏、加关注吧,谢谢啦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值