[有监督学习]2.详细图解正则化

正则化
正则化是防止过拟合的一种方法,与线性回归等算法配合使用。通过向损失函数增加惩罚项的方式对模型施加制约,有望提高模型的泛化能力。


概述
正则化是防止过拟合的方法,用于机器学习模型的训练阶段。过拟合是模型在验证数据上产生的误差比在训练数据上产生的误差(训练误差)大得多的现象。过拟合的一个原因是机器学习模型过于复杂。正则化可以降低模型的复杂度,有助于提高模型的泛化能力。
在详细了解正则化的方法之前,我们先看一下使用了正则化的模型如何防止过拟合。这里使用的数据是图 2-7 中的训练数据(灰色的数据点)和验证数据(黑色的数据点)。这些数据点是对函数 添加了遵循高斯分布的随机数而生成的。


▲图 2-7 使用 加随机数生成的数据


下面尝试用线性回归对这份数据建模。不断在线性回归中加入一次项、二次项……观察随着多项式的次数越来越大,训练误差和验证误差会如何变化。
不同次数d的训练结果如图 2-8 所示。此时,使用均方误差计算使误差最小的学习参数wi。一次线性回归函数是,因此图形是直线;二次线性回归函数是 ,因此图形是二次曲线;六次线性回归函数是,它的图形看上去是一个非常复杂的曲线。

▲图 2-8 不同次数的线性回归的训练结果(对于同样的数据,复杂的模型会发生过拟合)


不同次数的训练误差和验证误差如表 2-5 所示。我们可以看出随着函数次数的增加,训练误差渐渐变小了。如果只看训练误差,那么六次线性回归的误差 0.024 是最小的,但此时的验证误差是 3.472,比训练误差大了很多。六次线性回归是一个复杂的模型,虽然它减小了训练误差,但是由于过拟合,它的泛化能力很低。
▼表 2-5 次数与训练误差、验证误差的关系


接下来看一下对线性回归应用正则化后的结果,如图 2-9 和表 2-6 所示。正则化可以通过向损失函数增加惩罚项的方式防止过拟合。从图 2-9 可以看出,正则化抑制了模型的复杂度,次数增加后验证误差也被抑制,从而防止了过拟合的出现。

▲图 2-9 对不同次数的线性回归应用正则化后的训练结果(模型的复杂度得到了抑制)
▼表 2-6 应用正则化后的次数与训练误差、验证误差的关系


现在有许多正则化的方法。前面使用的回归模型是被称为岭回归(ridge regression)的具有代表性的回归方法。下面的“算法说明”部分将介绍如何防止岭回归出现过拟合,从而提高它的泛化能力。


算法说明
在“概述”部分,我们了解了复杂模型的过拟合以及使用正则化防止过拟合的知识。复杂模型过拟合的一个原因是学习参数 wi的值太大(或太小)。表 2-7 列出了不同次数的线性回归的学习参数。随着次数的增加,学习参数的绝对值变大。
表 2-8 列出了使用正则化后的学习参数。使用正则化能够抑制学习参数随着次数增加而变大。
▼表 2-7 不同次数的学习参数

▼表 2-8 应用正则化后的不同次数的学习参数


为什么正则化可以抑制学习参数变大呢?这里以下面的岭回归的误差函数为例进行说明。简单起见,这里考虑对二次线性回归应用正则化的情况:

等号右边的第 1 项​​​​​​​ 是线性回归的损失函数。第 2 项 被称为惩罚项(或者正则化项),是学习参数的平方和的形式。一般来说,惩罚项中不包含截距。

另外,α是控制正则化强度的参数,α越大,对学习参数的抑制越强;α越小,对训练数据过拟合的可能性越大。


下面思考岭回归的损失函数 的最小化。
等号右边的第 1 项其实是求使得与训练数据 y 之间的误差变小的任意 w0、w1、w2 的问题,右边第 2 项(即惩罚项)是学习参数的平方和,因此学习参数的绝对值越大,损失函数整体的值就越大。由此可知,惩罚项具有“对绝对值大的学习参数给予损失变大的惩罚”的作用,这个作用可以抑制学习参数变大。


示例代码
下面是对 sin 函数进行岭回归建模时的示例代码。代码中使用 PolynomialFeatures 方法创建了六次多项式。
▼示例代码

# 使用一个简单的正弦函数和噪声数据来训练和测试一个 Ridge 回归模型,并计算预测值与真实值之间的均方误差。import numpy as np
from sklearn.preprocessing import PolynomialFeatures # PolynomialFeatures是scikit-learn库中的一个特征转换类,用于将输入数据进行多项式特征扩展。它的主要参数是degree,表示多项式的次数。
from sklearn.linear_model import Ridge
from sklearn.metrics import mean_squared_errortrain_size = 20
test_size = 12# np.random.uniform(low=0, high=1.0, size=None) 是 NumPy 中的随机数生成函数,用于生成在闭区间 [low, high] 内均匀分布的随机浮点数。
# 生成一个训练数据的数组,其中 low=0 表示数据的下限,high=1.2 表示数据的上限,size=train_size 表示生成的数组大小为 train_size。
train_X = np.random.uniform(low=0, high=1.2, size=train_size)
test_X = np.random.uniform(low=0.1, high=1.3, size=test_size)
# 生成一个训练标签的数组,其中 np.sin(train_X * 2 * np.pi) 表示一个正弦函数,np.random.normal(0, 0.2, train_size) 表示一个均值为 0,标准差为 0.2 的正态分布噪声。
train_y = np.sin(train_X * 2 * np.pi) + np.random.normal(0, 0.2, train_size)
test_y = np.sin(test_X * 2 * np.pi) + np.random.normal(0, 0.2, test_size)poly = PolynomialFeatures(6) # 创建了一个次数为 6 的多项式特征转换对象。
# fit_transform方法会遍历输入数据,并根据多项式特征转换的规则对每个数据点进行扩展。对于训练数据,通过train_X.reshape(train_size, 1)将其转换为一维数组,以便与PolynomialFeatures的输入要求匹配。同样,对测试数据进行相同的转换。
train_poly_X = poly.fit_transform(train_X.reshape(train_size, 1))
test_poly_X = poly.fit_transform(test_X.reshape(test_size, 1))# 创建一个岭回归模型,其中alpha=1.0是岭回归的正则化参数
model = Ridge(alpha=1.0)
# 使用训练数据train_poly_X和标签train_y对模型进行训练。
model.fit(train_poly_X, train_y)
train_pred_y = model.predict(train_poly_X)
test_pred_y = model.predict(test_poly_X)print(mean_squared_error(train_pred_y, train_y))
print(mean_squared_error(test_pred_y, test_y))

注:多项式特征转换的目的是将原始数据转换为更高维的数据,以便更好地表示数据的特征。通过添加更高次的多项式特征,可以捕捉数据中的非线性关系。

详细说明
通过α控制正则化强度
下面来详细看一下控制正则化强度的超参数α。图 2-10 是使用不同的α 值时模型的可视化图形。当 α 增大时,可以看出学习参数被抑制,图形变得简单。相反,当 α 变小时,对学习参数的绝对值变大的惩罚力度变缓,模型变复杂。另外,当α = 0 时,惩罚项始终为 0,因此等同于不使用正则化的线性回归。一般来说,应一边验证误差一边对 α 进行调整,最终得到合适的 α。

▲图 2-10 α 变化时的岭回归


岭回归和 Lasso 回归
前面介绍了作为正则化方法的岭回归。岭回归的误差函数的惩罚项是学习参数的平方和的形式,通过将该惩罚项改为其他形式,可以实现不同特点的正则化。除了岭回归以外,还有一种具有代表性的正则化方法——Lasso 回归。Lasso 回归的误差函数如下:

Lasso 回归的惩罚项是学习参数的绝对值之和,这一点与岭回归不同。岭回归和 Lasso 回归计算学习参数时的情况分别如图 2-11a 和图 2-11b 所示。

▲图 2-11 计算学习参数时的示意图


绿线是线性回归的误差函数,蓝线是惩罚项的相关函数。岭回归的惩罚项是学习参数的平方和,所以其图形是图 2-11a 所示的圆形;Lasso 回归的惩罚项是绝对值的和,所以其图形是图 2-11b 所示的四边形。原来的函数(线性回归的误差函数)与这些函数的交点就是带有正则化项的误差函数的最佳解。可以看出,在加入惩罚项后,图 2-11a 的岭回归的学习参数得到了抑制。图 2-11b 的 Lasso 回归的情况与岭回归相似,学习参数同样被抑制,但学习参数 w2 变为了 0。
Lasso 回归计算的是函数与这种四边形函数的交点,因此具有学习参数容易变为 0 的特点。利用这个特点,我们可以使用学习参数不为 0 的特征来构建模型,从而达到利用 Lasso 回归选择特征的效果。这样不仅能提高模型的泛化能力,还能使模型的解释变容易。

———————————————————————————————————————————

文章来源:书籍《图解机器学习算法》

作者:秋庭伸也 杉山阿圣 寺田学

出版社:人民邮电出版社

ISBN:9787115563569

本篇文章仅用于学习和研究目的,不会用于任何商业用途。引用书籍《图解机器学习算法》的内容旨在分享知识和启发思考,尊重原著作者宫崎修一和石田保辉的知识产权。如有侵权或者版权纠纷,请及时联系作者。
———————————————————————————————————————————
 

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

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

相关文章

DL/ML/RL/TL/FL机器学习框架总结

前言 本文总结了DL/深度学习、ML/机器学习、DML/分布式机器学习、AutoML/自动化机器学习、RL/强化学习、MLaaS/机器学习及服务、SR/语音识别领域的机器学习框架,可作为学习、研究、研发的参考资料。 1.DL/深度学习框架 PyTorch PyTorch是一个开源的Python机器学…

面试题:计算机网络中的七四五是什么?

面试题:计算机网络中的七四五是什么? 计算机网络中说的七四五是指:OSI 七层模型、TCP/IP 四层模型、OSI 与 TCP/IP 的综合五层模型 OSI 七层模型 OSI 将计算机网络分为了七层,每一层抽象底层的内容,并遵守一定的规则…

逆天工具一键修复图片,视频去码。本地部署超详细!!

上一篇文章:逆天工具一键修复图片,视频去码。简直不要太好用!-CSDN博客 根据上一篇文章展示的效果,本文章主要讲如何部署本地github开源项目。博主走了无数弯路,最后精化下来的步骤,超级详细!&a…

godot4.2 + GDextension c++在 vs code 中断点调试配置

游戏开发中如果做不到自己编写的代码做断点调试,无不是瞎子摸象,特别是C这么底层的语言。这2天开始在VS studio中折腾,一直折腾不出结果,几次想要放弃GODOT。最终今天在VS code中搞定了这断点调试C代码。 在上一篇文章我已经做好了…

LabVIEW调用外部DLL(动态链接库)

LabVIEW调用外部DLL(动态链接库) LabVIEW调用外部DLL(动态链接库)可以扩展其功能,使用外部库实现复杂计算、硬件控制等任务。通过调用节点(Call Library Function Node)配置DLL路径、函数名称和…

【机器学习】集成语音与大型语音模型等安全边界探索

探索集成语音与大型语言模型(SLMs)的安全边界 一、引言二、SLMs的潜在安全风险三、对抗性攻击与越狱实验四、提高SLMs安全性的对策五、总结与展望 一、引言 近年来,随着人工智能技术的飞速发展,集成语音与大型语言模型&#xff08…

Java筑基—String类

这里写目录标题 一、字符串的拼接二、获取字符串长度三、字符串转换四、去除前后空白字符五、比较字符串是否相等六、比较字符串是否包含七、字符串是否以某些开始、结尾八、字符串的替换九、字符串的转换十、空串和NULL串 一、字符串的拼接 Java语言允许使用 号拼接两个字符…

WordPress Country State City Dropdown CF7插件 SQL注入漏洞复现(CVE-2024-3495)

0x01 产品简介 Country State City Dropdown CF7插件是一个功能强大、易于使用的WordPress插件,它为用户在联系表单中提供国家、州/省和城市的三级下拉菜单功能,帮助用户更准确地填写地区信息。同时,插件的团队和支持也非常出色,为用户提供高质量的服务。 0x02 漏洞概述 …

Mybatis-plus 更新或新增时设置某些字段值为空

方式一 在实体中设置某个字段为的注解中 TableField(updateStrategy FieldStrategy.IGNORED)private Date xxxxxxTime;通过这种方式会指定更新时该字段的策略,通常情况下updateById这种会根据字段更新,通常都会判断null 以及空值 指定 updateStrategy …

每日一题《leetcode--LCR 021.删除链表的倒数第N个结点》

https://leetcode.cn/problems/SLwz0R/ 这道题我们可以设一个哨兵位,然后把要遍历链表的结点指向该哨兵位。最后用for循环将指针指向要删除结点的前一个。 struct ListNode* removeNthFromEnd(struct ListNode* head, int n){struct ListNode* dummy malloc(sizeof…

flink left join消费kafka数据

left join会产生回车流数据 在控制台数据 import com.sjfood.sjfood.gmallrealtime.app.BaseSQLAPP; import com.sjfood.sjfood.gmallrealtime.util.SQLUtil; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.table.…

SwiftUI 5.0(iOS 17)进一步定制 TipKit 外观让撸码如虎添翼

概览 在之前 SwiftUI 5.0(iOS 17)TipKit 让用户更懂你的 App 这篇博文里,我们已经初步介绍过了 TipKit 的基本知识。 现在,让我们来看看如何进一步利用 SwiftUI 对 TipKit 提供的细粒度外观定制技巧,让 Tip 更加“明眸…

【网关】工业智能网关-02

一 公司简介 保定飞凌嵌入式技术有限公司始于2006年,是一家专注嵌入式核心控制系统研发、设计和生产的高新技术企业,是国内最早专业从事嵌入式技术的企业之一。 经过十几年的发展与积累,公司拥有业内一流的软硬件研发团队,在北京…

基于大模型的智慧零售教育科研平台——技术方案

一、概述 1.1背景 随着数字经济的快速发展和全社会数字化水平的升级,人工智能的积极作用越来越凸显,人工智能与各个行业的深度融合已成为促进传统产业转型升级的重要方式之一。ChatGPT的出现掀起了又一波人工智能发展热潮,人工智能行业发展势…

Linux 深入讲解自动化构建工具

各位大佬好 ,这里是阿川的博客 , 祝您变得更强 个人主页:在线OJ的阿川 大佬的支持和鼓励,将是我成长路上最大的动力 阿川水平有限,如有错误,欢迎大佬指正 Linux一系列的文章(质量分均在93分…

Python魔法之旅-魔法方法(07)

目录 一、概述 1、定义 2、作用 二、应用场景 1、构造和析构 2、操作符重载 3、字符串和表示 4、容器管理 5、可调用对象 6、上下文管理 7、属性访问和描述符 8、迭代器和生成器 9、数值类型 10、复制和序列化 11、自定义元类行为 12、自定义类行为 13、类型检…

3、css3 手写nav导航条(互相学习)

效果例图&#xff1a; 1、首先呈现的是html代码&#xff1a; <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…

西藏大学计科改考11408!西藏大学计算机考研考情分析!

西藏大学&#xff08;Tibet University&#xff09;&#xff0c;简称藏大&#xff0c;是西藏自治区所属的综合性大学&#xff0c;是列入教育部直属高校序列的教育部与西藏自治区人民政府合建高校&#xff0c;国家“211工程”重点建设大学&#xff0c;国家“双一流”世界一流学科…

【Linux 网络】网络基础(三)(其他重要协议或技术:DNS、ICMP、NAT)

一、DNS&#xff08;Domain Name System&#xff09; DNS 是一整套从域名映射到 IP 的系统。 1、DNS 背景 TCP/IP 中使用 IP 地址和端口号来确定网络上的一台主机的一个程序&#xff0c;但是 IP 地址不方便记忆。于是人们发明了一种叫主机名的东西&#xff0c;是一个字符串&…

法线方程实现最小二乘拟合(Matlab)

一、问题描述 利用法线方程实现最小二乘拟合。 二、实验目的 掌握法线方程方法的原理&#xff0c;能够利用法线方程完成去一组离散数据点的拟合。 三、实验内容及要求 对于下面的不一致系统&#xff0c;构造法线方程&#xff0c;计算最小二乘以及2-范数误差。 [ 3 − 1 2 …