线性回归之正则化(regularization)

文章目录

  • 机器学习中的"防过拟合神器":正则化全解析
    • 1. 正则化:不只是"规矩"那么简单
      • 1.1 鲁棒性案例说明
    • 2. L1正则化:冷酷的特征选择器
    • 3. L2正则化:温柔的约束者
    • 4. L1 vs L2:兄弟间的较量
    • 5. 正则化的超参数调优
    • 6. 正则化的数学直觉
    • 7. 常见误区
    • 8. 总结

机器学习中的"防过拟合神器":正则化全解析

1. 正则化:不只是"规矩"那么简单

  • 想象一下,你正在教一个特别勤奋但有点死板的学生学习数学。这个学生能把所有例题背得滚瓜烂熟,但遇到稍微变化的新题目就束手无策——这就是机器学习中的**过拟合(Overfitting)**现象。

  • 正则化(Regularization)就是给这个"过于勤奋"的模型制定一些"规矩",防止它过度记忆训练数据中的噪声和细节,从而提高泛化能力。简单说,正则化就是在损失函数中额外添加一个惩罚项,让模型参数不要变得太大。

  • 正则化就是防止过拟合,增加模型的鲁棒性robust。鲁棒性调优就是让模型拥有更好的鲁棒性,也就是让模型的泛化能力和推广能力更加的强大。

1.1 鲁棒性案例说明

  • 下面两个式子描述同一条直线那个更好?
    0.5 x 1 + 0.4 x 2 + 0.3 = 0 5 x 1 + 4 x 2 + 3 = 0 0.5x_1+0.4x_2+0.3=0 \\ 5x_1+4x_2+3=0 0.5x1+0.4x2+0.3=05x1+4x2+3=0
  • 第一个更好,因为下面的公式是上面的十倍,当w越小公式的容错的能力就越好。因为把测试集带入公式中如果测试集原来是100在带入的时候发生了一些偏差,比如说变成了101,第二个模型结果就会比第一个模型结果的偏差大的多。公式中
    y ^ = w T x \hat y=w^Tx y^=wTx当x有一点错误,这个错误会通过w放大从而影响z。但w也不能太小,当w太小时正确率就无法保证,就没法做分类。想要有一定的容错率又要保证正确率就要由正则项来决定。
  • 所以正则化(鲁棒性调优)的本质就是牺牲模型在训练集上的正确率来提高推广能力,W在数值上越小越好,这样能抵抗数值的扰动。同时为保证模型的正确率W又不能极小。故而人们将原来的损失函数加上一个惩罚项,这里面损失函数就是原来固有的损失函数,比如回归的话通常是MSE,然后在加上一部分惩罚项来使得计算出来的模型W相对小一些来带来泛化能力。
  • 常用的惩罚项有L1正则项或者L2正则项
    L 1 = ∑ i = 0 m ∣ w i ∣ L 2 = ∑ i = 0 m w i 2 L_1=\sum_{i=0}^m|w_i| \\ L_2=\sum_{i=0}^m w_{i}^{2} L1=i=0mwiL2=i=0mwi2
  • L1和L2正则的公式数学里面的意义就是范数,代表空间中向量到原点的距离
    在这里插入图片描述

2. L1正则化:冷酷的特征选择器

  • L1正则化,又称Lasso回归,它在损失函数中添加的是模型权重的绝对值和:
    损失函数 = 原始损失 + λ * Σ|权重|
    

特点

  • 倾向于产生稀疏解(许多权重精确为0)

  • 自动执行特征选择

  • 对异常值敏感

  • 在零点不可导

  • L1正则化自动选择重要特征:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import Lasso# 设置支持中文的字体
# 使用SimHei字体,这是一种常见的中文字体,能够正确显示中文字符
plt.rcParams['font.sans-serif'] = ['SimHei']
# 解决负号显示问题,确保在图表中正确显示负号
plt.rcParams['axes.unicode_minus'] = False# 生成一些数据,其中只有3个特征真正有用
# 设置随机种子以确保结果可重复
np.random.seed(42)
# 生成100个样本,每个样本有10个特征的随机数据
X = np.random.randn(100, 10)
# 定义真实系数,只有前3个和第5个特征有用
true_coef = [3, 2, 0, 0, -1, 0, 0, 0, 0, 0]
# 生成目标变量y,通过线性组合X和true_coef,并添加一些噪声
y = np.dot(X, true_coef) + np.random.normal(0, 0.5, 100)# 使用L1正则化(Lasso回归)
# 创建Lasso模型实例,设置正则化参数alpha
lasso = Lasso(alpha=0.1)
# 使用生成的数据拟合模型
lasso.fit(X, y)# 查看学到的系数
# 使用stem图显示Lasso模型学到的系数
plt.stem(range(10), lasso.coef_)
# 在同一图表上绘制真实系数,用红色圆圈标记
plt.plot(range(10), true_coef, 'ro', label='真实系数')
# 添加图例
plt.legend()
# 设置图表标题
plt.title('L1正则化的特征选择能力')
# 显示图表
plt.show()
  • 你会惊讶地发现,Lasso几乎完美地识别出了哪些特征真正重要,哪些可以忽略!
    在这里插入图片描述

3. L2正则化:温柔的约束者

  • L2正则化,又称权重衰减(Weight Decay)岭回归(Ridge Regression),它在损失函数中添加了模型权重的平方和作为惩罚项:
损失函数 = 原始损失 + λ * Σ(权重²)

其中λ是正则化强度,控制惩罚的力度。
特点

  • 使权重趋向于小而分散的值
  • 对异常值不敏感
  • 数学性质良好,总是可导

L2正则化在行动:

import numpy as np
from sklearn.linear_model import Ridge
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import PolynomialFeatures
import matplotlib.pyplot as plt# 设置支持中文的字体
# 使用SimHei字体,这是一种常见的中文字体,能够正确显示中文字符
plt.rcParams['font.sans-serif'] = ['SimHei']
# 解决负号显示问题,确保在图表中正确显示负号
plt.rcParams['axes.unicode_minus'] = False# 生成一些带噪声的数据
np.random.seed(42)
X = np.linspace(0, 1, 20)
y = np.sin(2 * np.pi * X) + np.random.normal(0, 0.2, 20)# 准备不同阶数的多项式特征
X_test = np.linspace(0, 1, 100)
plt.scatter(X, y, color='blue', label='训练数据')# 对比不同正则化强度
for alpha in [0, 0.001, 0.01]:model = make_pipeline(PolynomialFeatures(15),Ridge(alpha=alpha))model.fit(X[:, np.newaxis], y)y_test = model.predict(X_test[:, np.newaxis])plt.plot(X_test, y_test, label=f'λ={alpha}')plt.legend()
plt.title('L2正则化效果对比')
plt.show()
  • 运行这段代码,你会看到随着λ增大,曲线从过拟合(完美拟合噪声)逐渐变得平滑,更接近真实的sin函数形状。
    在这里插入图片描述

4. L1 vs L2:兄弟间的较量

在这里插入图片描述

特性L1正则化L2正则化
惩罚项Σw
解的性质稀疏非稀疏
特征选择
计算复杂度高(需特殊优化)
对异常值敏感不敏感

经验法则

  • 当特征很多且认为只有少数重要时 → 用L1
  • 当所有特征都可能相关且重要性相当时 → 用L2
  • 不确定时 → 用ElasticNet(两者结合)
    在这里插入图片描述
  • L 1 L_1 L1更容易相交于坐标轴上,而 L 2 L_2 L2更容易相交于非坐标轴上。如果相交于坐标轴上,如图 L 1 L_1 L1就使得是 W 2 W_2 W2非0, W 1 W_1 W1是0,这个就体现出 L 1 L_1 L1的稀疏性。如果没相交于坐标轴,那 L 2 L_2 L2就使得W整体变小。通常为去提高模型的泛化能力 L 1 L_1 L1 L 2 L_2 L2都可以使用。 L 1 L_1 L1的稀疏性在做机器学习的时候,可以帮忙去做特征的选择。

5. 正则化的超参数调优

选择正确的λ值至关重要:

  • λ太大 → 欠拟合(模型太简单)
  • λ太小 → 过拟合(模型太复杂)

可以使用交叉验证来寻找最佳λ:

from sklearn.linear_model import LassoCV# 使用LassoCV自动选择最佳alpha
lasso_cv = LassoCV(alphas=np.logspace(-4, 0, 20), cv=5)
lasso_cv.fit(X, y)print(f"最佳alpha值: {lasso_cv.alpha_}")

6. 正则化的数学直觉

为什么限制权重大小能防止过拟合?想象模型是一个画家:

  • 没有正则化:画家可以用极其精细的笔触(大权重)来完美复制训练数据中的每个细节(包括噪声)
  • 有正则化:画家被迫用更粗的笔触(小权重),不得不忽略一些细节,从而捕捉更一般的模式

7. 常见误区

误区

  • 认为正则化可以完全替代更多的训练数据
  • 在所有特征上使用相同的正则化强度
  • 忽略特征缩放(正则化对尺度敏感!

8. 总结

  • 正则化就像给模型戴上的"紧箍咒",看似限制了模型的自由,实则让它更加专注和高效。记住,在机器学习中,有时候"约束"反而能带来"解放"——解放模型从训练数据的桎梏中解脱出来,获得更好的泛化能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/902203.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mapbox基础,加载视频到地图

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️raster 栅格图层 api二、🍀加载视频到…

Linux系统的远程终端登录、远程图形桌面访问、 X图形窗口访问

目录 一、配置Ubuntu系统的网络和用户 1、设置虚拟机网络为桥接模式 2.查看当前ip、子网掩码、网关 3.修改配置文件 二、远程终端登录Ubuntu 三、使用XShell远程连接 1、确保SSH服务已启动 2、检查SSH服务状态 3、获取树莓派IP地址 4、Xming安装好之后打开让它在后台…

多模态大语言模型arxiv论文略读(三十一)

From GPT-4 to Gemini and Beyond: Assessing the Landscape of MLLMs on Generalizability, Trustworthiness and Causality through Four Modalities ➡️ 论文标题:From GPT-4 to Gemini and Beyond: Assessing the Landscape of MLLMs on Generalizability, Tr…

基于Matlab求解矩阵电容等效容值

1需求 仿真测试8*10阶举证电容等效容值。 2模型搭建 2.1打开simscape 在打开simulink之后打开simscape库,Simscape库位置如下 2.2搭建模型 在库中寻找需要的元件搭建电路。 2.2.1基本元件 电阻电容电感等基础器件,搭建电路之后需要对其进行幅值&…

【C++】 —— 笔试刷题day_22

一、添加字符 题目解析 这道题,给定两个字符串A和B,字符串A的长度要小于B的长度; 现在我们要对A字符串添加字符,使得A字符串长度等于B字符串的长度,并且要求对应位置的字母尽量相等,然后求出来不相等的字符…

错误: 找不到或无法加载主类 HelloWorld,cmd窗口,java命令,提示

错误: 找不到或无法加载主类 HelloWorld 解决办法 检查classpath是否 .; 开头的

手撕LLM(五):从源码出发,探索多模态VL模型的推理全流程

前面我们分享了关于大语言模型的相关技术,包括前向推理、LoRa挂载、MoE模型、模型预训练等;后续还是会基于MiniMindLM模型继续分享关于大语言模型的SFT指令微调、LoRa微调、基于人类偏好的强化学习微调以及模型蒸馏相关的技术,请大家持续关注…

关于隔离2:ADC芯片

ADC可以称作是模拟芯片领域的明珠。作为一种关键器件,ADC设计难度大,专利墙高,所以国内一直处于追赶的状态。近年来,国产ADC发展极为迅速,逐渐在各项参数上赶上了国际主流水准。 模拟数字转换器ADC连接着现实模拟世界…

【MySQL】前缀索引、索引下推、访问方法,自适应哈希索引

最左前缀原则 对于INDEX(name, age)来说最左前缀可以是联合索引的最左N个字段, 也可以是字符串索引的最左M个字符。 SELECT * FROM t WHERE name LIKE 张%其效果和单独创建一个INDEX(name)的效果是一样的若通过调整索引字段的顺序, 可以少维护一个索引树, 那么这个顺序就是需要…

【Oracle专栏】Oracle中的虚拟列

Oracle相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 1.背景 在EXP方式导出时,发现 出现如下提示 EXP-00107: virtual column 不支持,因此采用expdp方式导出。于是本文针对oracle虚拟列进行简单介绍。 2. 相…

Nacos深度剖析与实践应用之-配置中心

📹 简介 在微服务架构中,配置管理是至关重要的基础能力。Nacos作为阿里巴巴开源的一体化动态服务发现、配置管理和服务管理平台,其配置中心模块提供了统一配置管理、动态配置推送、多环境支持等核心能力。相比传统配置文件方式,Na…

gma 2.1.4 (2025.04.18) | GmaGIS V0.0.1a3 更新日志

安装 gma 2.1.4 pip install gma2.1.4网盘下载: 链接:https://pan.baidu.com/s/1P0nmZUPMJaPEmYgixoL2QQ?pwd1pc8 提取码:1pc8 注意:此版本没有Linux版! 编译gma的Linux虚拟机没有时间修复,本期Linux版继…

在 Node.js 中设置响应的 MIME 类型

在 Node.js 中设置响应的 MIME 类型是为了让浏览器正确解析服务器返回的内容,比如 HTML、CSS、图片、JSON 等。我们通常通过设置响应头中的 Content-Type 字段来完成。 ✅ 一、什么是 MIME 类型(Content-Type)? MIME(…

SRS transcode支持 h264_nvenc 硬件解码方案

文章目录 SRS transcode支持 h264_nvenc 硬件解码方案1、修改文件2、重新编译3、使用 SRS transcode支持 h264_nvenc 硬件解码方案 SRS 是开源的流媒体服务,但在使用 GPU 服务器时,想要通过硬件加速,目前官方是不支持的,所以简单…

数字系统与编码

1. 数字系统(Number Systems) 1.1 常见数字系统 系统基数符号集示例应用场景二进制20, 11010计算机底层电路、数据存储八进制80-717Unix文件权限(如chmod 755)十进制100-942日常计算十六进制160-9, A-F0x1F内存地址、颜色编码&a…

【PyTorch】训练时跟OOM相关的提示信息

1. RuntimeError: CUDA error: CUBLAS_STATUS_NOT_INITIALIZED when calling cublasCreate(handle)

基于maven-jar-plugin打造一款自动识别主类的maven打包插件

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…

多态的主要好处与不足

多态是面向对象编程的核心特性之一,它通过方法重写、接口实现等方式实现“同一操作作用于不同对象时产生不同行为”。以下是多态的主要好处与不足: 多态的好处 1. 提高代码灵活性和扩展性 开闭原则支持:新增子类时,无需修改现有…

excel解析图片pdf附件不怕

背景 工作中肯定会有导入excel还附带图片附件的下面是我解析的excel,支持图片、pdf、压缩文件实现 依次去解析excel,看看也没有附件,返回的格式是Map,key是第几行,value是附件list附件格式都被解析成pdf格式Reader.jav…

python爬虫 线程,进程,协程

0x00 线程 线程是一个执行单位,是在一个进程里面的,是共享进程里面的提供的内存等资源,使用多个线程时和使用多个进程相比,多个线程使用的内存等资源较少。进程像一座“房子”(独立资源),线程是…