[有监督学习]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.mzph.cn/bicheng/20220.shtml

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

相关文章

Java文件IO

White graces:个人主页 🙉专栏推荐:Java入门知识🙉 🙉 内容推荐:JUC常见类🙉 🐹今日诗词:东风吹柳日初长,雨馀芳草斜阳🐹 ⛳️点赞 ☀️收藏⭐️关注💬卑微小博主&…

Three.js 研究:4、创建设备底部旋转的科技感圆环

1、实现效果 2、PNG转SVG 2.1、原始物料 使用网站工具https://convertio.co/zh/png-svg/进行PNG转SVG 3、导入SVG至Blender 4、制作旋转动画 4.1、给圆环着色 4.2、修改圆环中心位置 4.3、让圆环旋转起来 参考一下文章 Three.js 研究:1、如何让物体动起来 Thre…

“论SOA在企业集成架构设计中的应用”必过模板,突击2024软考高项论文

考题部分 企业应用集成(Enterprise Application Integration, EAI)是每个企业都必须要面对的实际问题。面向服务的企业应用集成是一种基于面向服务体系结构(Service-OrientedArchitecture,SOA)的新型企业应用集成技术,强调将企业和组织内部的资源和业务功…

VSCode界面Outline只显示类名和函数名,隐藏变量名

参考链接 https://blog.csdn.net/Zjhao666/article/details/120523879https://blog.csdn.net/Williamcsj/article/details/122401996 VSCode中界面左下角的Outline能够方便快速跳转到文件的某个类或函数,但默认同时显示变量,导致找某个函数时很不方便。…

mimkatz获取windows10明文密码

目录 mimkatz获取windows10明文密码原理 lsass.exe进程的作用 mimikatz的工作机制 Windows 10的特殊情况 实验 实验环境 实验工具 实验步骤 首先根据版本选择相应的mimikatz 使用管理员身份运行cmd 修改注册表 ​编辑 重启 重启电脑后打开mimikatz 在cmd切换到mi…

Seq2Seq模型:详述其发展历程、深远影响与结构深度剖析

Seq2Seq(Sequence-to-Sequence)模型是一种深度学习架构,专为处理从一个输入序列到一个输出序列的映射任务设计。这种模型最初应用于机器翻译任务,但因其灵活性和有效性,现已被广泛应用于自然语言处理(NLP&a…

医院该如何应对网络安全?

在线医生咨询受到很多人的关注,互联网医疗行业的未来发展空间巨大,但随着医院信息化建设高速发展 医院积累了大量的患者基本信息、化验结果、电子处方、生产数据和运营信息等数据 这些数据涉及公民隐私、医院运作和发展等多因素,医疗行业办…

【QEMU中文文档】1.关于QEMU

本文由 AI 翻译(ChatGPT-4)完成,并由作者进行人工校对。如有任何问题或建议,欢迎联系我。联系方式:jelin-shoutlook.com。 QEMU 是一款通用的开源机器仿真器和虚拟化器。 QEMU 可以通过几种不同的方式使用。最常见的用…

OrangePi AIpro--新手上路

目录 一、SSH登录二、安装VNC Sevice(经测试Xrdp远程桌面安装不上)2.1安装xface桌面2.2 配置vnc服务2.2.1 设置vnc server6-8位的密码2.2.2 创建vnc文件夹,写入xstartup文件2.2.3 给xstartup文件提高权限2.2.4 在安装产生的vnc文件夹创建xsta…

【Uniapp小程序】自定义导航栏uni-nav-bar滚动渐变色

效果图 新建activityScrollTop.js作为mixins export default {data() {return {navBgColor: "rgba(0,0,0,0)", // 初始背景颜色为完全透明navTextColor: "rgba(0,0,0,1)", // 初始文字颜色};},onPageScroll(e) {// 设置背景const newAlpha Math.min((e.s…

PPP认证两种:PAP和CHAP,两次握手和三次握手

CHAP(Challenge-Handshake Authentication Protocol,质询握手认证协议)的设计理念是增强网络认证过程的安全性。在CHAP的三次握手过程中,不直接传送用户的明文密码,以此来提高安全性,具体步骤如下&#xff…

springboot结合mybatis使用多数据源的方式

背景 最近有一个需求,有两个库需要做同步数据,一个Doris库,一个mysql库,两边的表结构一致,这里不能使用navicat等工具提供的数据传输之类的功能,只能使用代码做同步,springboot配置多数据…

如何设置手机的DNS

DNS 服务器 IP 地址 苹果 华为 小米 OPPO VIVO DNS 服务器 IP 地址 中国大陆部分地区会被运营商屏蔽网络导致无法访问,可修改手机DNS解决。 推荐 阿里的DNS (223.5.5.5)或 114 (114.114.114.114和114.114.115.115) 更多公开DNS参考: 苹果…

ESP32-C3模组上实现蓝牙BLE配网功能(1)

本文内容参考: 《ESP32-C3 物联网工程开发实战》 乐鑫科技 蓝牙的名字由来是怎样的?为什么不叫它“白牙”? 特此致谢! 一、蓝牙知识基础 1. 什么是蓝牙? (1)简介 蓝牙技术是一种无线数据和…

Camunda BPM架构

Camunda BPM既可以单独作为流程引擎服务存在,也能嵌入到其他java应用中。Camunda BPM的核心流程引擎是一个轻量级的模块,可以被Spring管理或者加入到自定义的编程模型中,并且支持线程模型。 1,流程引擎架构 流程引擎由多个组件构成,如下所示: API服务 API服务,允许ja…

蒙自源儿童餐新品上市,引领健康美味新潮流

随着夏日的热烈与儿童节的欢乐氛围到来,蒙自源品牌隆重推出儿童餐新品,以“快乐不分大小,谁还不是个宝宝”为主题,为广大消费者带来一场健康与美味的盛宴。新品上市活动将于5月25日举行,蒙自源将以其独特的产品魅力和创…

最新 HUAWEI DevEco Studio 调试技巧

最新 HUAWEI DevEco Studio 调试技巧 前言 在我们使用 HUAWEI DevEco Studio 编辑器开发鸿蒙应用时,免不了要对我们的应用程序进行代码调试。我们根据实际情况,一般会用到以下三种方式进行代码调试。 肉眼调试法注释排错调试法控制台输出法弹出提示法断…

STM32 入门教程(江科大教材)#笔记2

3-4按键控制LED /** LED.c**/ #include "stm32f10x.h" // Device headervoid LED_Init(void) {/*开启时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;GPIO_I…

关系数据库:关系运算

文章目录 关系运算并(Union)差(Difference)交(Intersection)笛卡尔积(Extended Cartesian Product)投影(projection)选择(Selection)除…

让表单引擎插上AI的翅膀-记驰骋表单引擎加入AI升级

让表单引擎插上AI的翅膀 随着科技的飞速发展,人工智能(AI)已经逐渐渗透到我们工作和生活的每一个角落。在数字化办公领域,表单引擎作为数据处理和流程自动化的重要工具,也迎来了与AI技术深度融合的新机遇。让表单引擎…