什么是过拟合、欠拟合现象以及如何缓解?_过拟合和欠拟合-程序员宅基地

技术标签: 机器学习  深度学习  神经网络  # 深度学习必备知识  

前言:在讲解之前,小编必须先陈述这样一个客观事实,就是在模型训练过程中,过拟合或者欠拟合现象基本上可以看作是一个必然会发生的事件,因为我们将不同算法模型应用在同一种数据上构建某一类策略时,最终会挑出表现最好的算法模型,无论这个技术复杂与否,这个过程本身就在过拟合。挑出来的算法模型比其它模型更好,很可能是因为它对样本数据内的噪音刻画的更精准,而非发现了一些被其他策略忽视到的真实存在于数据之间的因果关系。总之,过拟合或者欠拟合现象在模型训练过程中是不可避免的,但是可以通过一些方法缓解这种现象的发生,下面小编会对这部分问题具体讲解。

目录

1、过拟合和欠拟合现象的理解

2、缓解过拟合现象的方法

2.1 数据方面

2.2 模型方面

2.3 添加正则项

3、缓解欠拟合现象的方法


1、过拟合和欠拟合现象的理解

        不论过拟合还是欠拟合,都会造成算法模型预测的结果和真实结果产生较大的误差。为了理解过拟合和欠拟合是如何影响算法模型预测的误差的,我们就要理解误差指的是什么?误差可以表示成偏差、方差、噪声之和,即误差=偏差+方差+噪声,如图1所示。

图1

偏差:指的是算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力;

方差:指同样大小训练集的变动而导致的学习性能的变化,即刻画了因数据扰动而造成的影响;

噪声:表示在当前任务上任何学习算法所能达到的期望泛化误差的下界。

        过拟合是指模型对训练数据拟合程度过当的情况,反映在评估指标上,就是模型在训练数据上表现很好,但是在测试数据和新数据上表现较差。换句话说,从误差=偏差+方差+噪声的角度去思考,过拟合指的就是偏差在可接受范围内而方差过高的现象,造成模型在训练数据上几乎完美,而在新数据上预测结果可能跟真实值相差过大,图2就是一个典型的过拟合模型。

图2

        欠拟合则指的是模型在训练以及预测时模型表现都不好的情况,从误差=偏差+方差+噪声的角度去思考,欠拟合指的就是高偏差高方差的现象,重点在于偏差过大。出现欠拟合现象则说明该模型的特征学习能力太差,不能够学习到数据中的有效特征。

2、缓解过拟合现象的方法

        缓解过拟合现象的方法有很多种,本文将从数据、模型、正则项三方面进行讲解。

2.1 数据方面

        第一,可以获取更多的训练数据来训练模型,因为更多的样本会让模型学到更全面更有效的特征,从而减少噪声的影响,可以说这是缓解模型过拟合最有效的方法。

        第二,如果很难再获取到更多训练数据,那么可以对已有训练数据进行合理扩充,增加数据的多样性,比如图像数据可以通过图像平移、旋转、缩放、裁剪等手段进行扩充。

        另外,提前终止训练也可以缓解过拟合现象,因为在初始化网络时一般都是初始为较小的权值,但训练时间越长,部分网络权值可能越大,在合适的时间停止训练,就可以将网络拟合数据的能力限制在一定范围内。

2.2 模型方面

        降低模型的复杂度。数据少时,复杂的模型是产生过拟合的主要因素,神经网络可以通过减少网络层数、神经元个数(如Dropout、BN、池化等),决策树可以通过剪枝、降低深度、减少节点数等。另外也可以采取集成学习方法(比如Bagging、Boosting、Stacking三大类集成学习方法),把多个模型集成在一起来降低单一模型过拟合的风险。

2.3 添加正则项

        在优化目标函数时,通过在目标函数后面添加正则项也是缓解过拟合现象的一大途径,在这里小编主要讲解L1正则项和L2正则项两种,在神经网络优化器中的权值衰减weight_deacy参数就是L2正则,默认是0,即不添加L2正则;L1正则需要自己写代码实现,即在loss后添加L1正则项即可。添加L1正则项的目标函数和添加L2正则项的目标函数分别如下:

Obj 1=\frac{1}{N}\sum_{i=1}^{N}f(\hat{y_{i}},y_{i})+\sum_{i=1}^{N}|\omega _{i}|         

Obj 2=\frac{1}{N}\sum_{i=1}^{N}f(\hat{y_{i}},y_{i})+\sum_{i=1}^{N}\omega _{i}^{2}   

        如果加上这种正则项,要使目标函数小,就是希望等号右侧第一项的代价函数小,同时也希望\omega_{i }小。这样就说明每个样本的权重都很小,这样模型就不会太多的关注某种类型的样本, 模型参数也不会太复杂,有利于缓解过拟合现象。

        那么L1正则项和L2正则项有什么区别呢?

        图3

        如图3,左边是L1正则化的,上面彩色的是代价函数Cost的等高线图,也就是在同一条线上Cost是相等的,比如A,B,C三点, 产生的Cost是相等的。黑色的矩形表示L1正则项的一个等高线,|\omega _{1}+\omega _{2}|=r, 假设这里的r取1,那么矩形框上任意一个点上正则项的值都是1。由于我们要使目标函数最小,也就是要让代价函数cost和正则项之和最小,以图中A、B、C三点的目标函数为例,由于这三点处于同一等高线上,即它们的代价函数cost的值相等,但是很明显C点的正则项比B、C点的正则项值都小,所以C点的目标函数的值最小。所以不难发现,添加L1正则项的目标函数,其最优解往往在坐标轴上,既能保证损失最小,也能保证各个特征的权重参数\omega之和最小,同时权重参数\omega有稀疏解,即有0解。某个参数解\omega =0,也就是说模型会选择性忽视该参数对应的特征,让该特征不对模型预测结果产生任何影响。

        图3右边是L2正则化的,同理可以知道添加L2正则项的目标函数,其最优解在损失最小的一批解中选择参数\omega最小的。其与L1正则项不同,L2正则项不会产生稀疏解,L2只会让模型对各个特征只赋予较小的权重,从而缓解过拟合现象。

L1正则化的特点:

                        ①不容易计算,在零点连续但不可导,需分段求导;

                        ②可以将某些特征的权重缩小至0,即把这些特征对结果的影响降为0(稀疏解);

                        ③对有效特征赋予较大的权值,而其余特征权值几乎为0,即高度关注有效特征;

                        ④可以提供稀疏方案,通常是特征数量巨大时的首选;

                        ⑤对异常值(噪声)更具抵抗力。

L2正则化特点:

                        ①容易计算,可导,适合基于梯度的方法;

                        ②保证所有特征对模型预测结果的的影响都很小;

                        ③对异常值(噪声)敏感;

                        ④相对于L1正则会更加准确。

3、缓解欠拟合现象的方法

数据上:可以通过特征工程,例如上下文特征、组合特征等,因为造成欠拟合的因素主要是特征不足或者特征与目标的相关性不强;

模型上:增加模型的复杂度来增加模型的拟合能力,例如增加神经元、网络层数、高阶项等;

减少正则项:正则项是为了防止过拟合的,当出现欠拟合现象时,可以减少正则化系数。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Mike_honor/article/details/125841778

智能推荐

settext 下划线_Android TextView 添加下划线的几种方式-程序员宅基地

文章浏览阅读748次。总结起来大概有5种做法:将要处理的文字写到一个资源文件,如string.xml(使用html用法格式化)当文字中出现URL、E-mail、电话号码等的时候,可以将TextView的android:autoLink属性设置为相应的的值,如果是所有的类型都出来就是**android:autoLink="all",当然也可以在java代码里 做,textView01.setAutoLinkMask(Li..._qaction::settext 无法添加下划线

TableStore时序数据存储 - 架构篇_tablestore 时间类型处理-程序员宅基地

文章浏览阅读6.3k次,点赞2次,收藏10次。摘要: 背景 随着近几年物联网的发展,时序数据迎来了一个不小的爆发。从DB-Engines上近两年的数据库类型增长趋势来看,时序数据库的增长是非常迅猛的。在去年我花了比较长的时间去了解了一些开源时序数据库,写了一个系列的文章(综述、HBase系、Cassandra系、InfluxDB、Prometheus),感兴趣的可以浏览。背景随着近几年物联网的发展,时序数据迎来了一个不小的爆发。从DB..._tablestore 时间类型处理

Ubuntu20.04下成功运行VINS-mono_uabntu20.04安装vins-mono-程序员宅基地

文章浏览阅读5.7k次,点赞8次,收藏49次。可以编译成功但是运行时段错误查找原因应该是ROS noetic版本中自带的OpenCV4和VINS-mono中需要使用的OpenCV3冲突的问题。为了便于查找问题,我只先编译feature_tracker包。解决思路历程:o想着把OpenCV4相关的库移除掉,但是发现编译feature_tracker的时候仍然会关联到Opencv4的库,查找原因是因为cv_bridge是依赖opencv4的,这样导致同时使用了opencv3和opencv4,因此运行出现段错误。oo进一步想着(1)把vins-mon_uabntu20.04安装vins-mono

TMS320C6748_EMIF时钟配置_tms 6748-程序员宅基地

文章浏览阅读3.6k次,点赞3次,收藏12次。创龙TL6748开发板中,EMIFA模块使用默认的PLL0_SYSCLK3时钟,使用AISgen for D800K008工具加载C6748配置文件C6748AISgen_456M_config(Configuration files,在TL_TMS6748/images文件夹下),由图可以看到DIV3等于4,注意这里的DIV3就是实际的分频值(x),而不是写入相应PLL寄存器的值(x-1)。_tms 6748

eigen稀疏矩阵拼接(基于块操作的二维拼接)的思考-程序员宅基地

文章浏览阅读5.9k次,点赞4次,收藏13次。转载请说明出处:eigen稀疏矩阵拼接(块操作)eigen稀疏矩阵拼接(块操作)关于稀疏矩阵的块操作:参考官方链接 However, for performance reasons, writing to a sub-sparse-matrix is much more limited, and currently only contiguous sets of columns..._稀疏矩阵拼接

基于Capon和信号子空间的变形算法实现波束形成附matlab代码-程序员宅基地

文章浏览阅读946次,点赞19次,收藏19次。波束形成是天线阵列信号处理中的一项关键技术,它通过对来自不同方向的信号进行加权求和,来增强特定方向的信号并抑制其他方向的干扰。本文介绍了两种基于 Capon 和信号子空间的变形算法,即最小方差无失真响应 (MVDR) 算法和最小范数算法,用于实现波束形成。这些算法通过优化波束形成权重向量,来最小化波束形成输出的方差或范数,从而提高波束形成性能。引言波束形成在雷达、声纳、通信和医学成像等众多应用中至关重要。它可以增强目标信号,抑制干扰和噪声,提高系统性能。

随便推点

Ubuntu好用的软件推荐_ubuntu开发推荐软件-程序员宅基地

文章浏览阅读3.4w次。转自:http://www.linuxidc.com/Linux/2017-07/145335.htm使用Ubuntu开发已经有些时间了。写下这篇文章,希望记录下这一年的小小总结。使用Linux开发有很多坑,同时也有很多有趣的东西,可以编写一些自动化脚本,添加定时器,例如下班定时关机等自动化脚本,同时对于服务器不太了解的朋友,建议也可以拿台Linux来实践下,同时Ubuntu在Androi_ubuntu开发推荐软件

Nginx反向代理获取客户端真实IP_nginx获取到的是交换机的ip-程序员宅基地

文章浏览阅读2.2k次。一,问题 nginx反向代理后,在应用中取得的ip都是反向代理服务器的ip,取得的域名也是反向代理配置的url的域名,解决该问题,需要在nginx反向代理配置中添加一些配置信息,目的将客户端的真实ip和域名传递到应用程序中。二,解决 Nginx服务器增加转发配置 proxy_set_header Host $host;_nginx获取到的是交换机的ip

Wireshark TCP数据包跟踪 还原图片 WinHex应用_wireshark抓包还原图片-程序员宅基地

文章浏览阅读1.4k次。Wireshark TCP数据包跟踪 还原图片 WinHex简单应用 _wireshark抓包还原图片

Win8蓝屏(WHEA_UNCORRECTABLE_ERROR)-程序员宅基地

文章浏览阅读1.5k次。Win8下安装VS2012时,蓝屏,报错WHEA_UNCORRECTABLE_ERROR(P.S.新的BSOD挺有创意":("),Google之,发现[via]需要BIOS中禁用Intel C-State,有严重Bug的嫌疑哦原因有空再看看..._win8.1 whea_uncorrectable_error蓝屏代码

案例课1——科大讯飞_科大讯飞培训案例-程序员宅基地

文章浏览阅读919次,点赞21次,收藏22次。科大讯飞是一家专业从事智能语音及语音技术研究、软件及芯片产品开发、语音信息服务的软件企业,语音技术实现了人机语音交互,使人与机器之间沟通变得像人与人沟通一样简单。语音技术主要包括语音合成和语音识别两项关键技术。此外,语音技术还包括语音编码、音色转换、口语评测、语音消噪和增强等技术,有着广阔的应用。_科大讯飞培训案例

perl下载与安装教程【工具使用】-程序员宅基地

文章浏览阅读4.7k次。Perl是一个高阶程式语言,由 Larry Wall和其他许多人所写,融合了许多语言的特性。它主要是由无所不在的 C语言,其次由 sed、awk,UNIX shell 和至少十数种其他的工具和语言所演化而来。Perl对 process、档案,和文字有很强的处理、变换能力,ActivePerl是一个perl脚本解释器。其包含了包括有 Perl for Win32、Perl for ISAPI、PerlScript、Perl。_perl下载

推荐文章

热门文章

相关标签