机器学习中常见的过拟合解决方法

机器学习中常见的过拟合解决方法在机器学习中,我们将模型在训练集上的误差称之为训练误差,又称之为经验误差,在新的数据集(比如测试集)上的误差称之为泛化误差,泛化误差也可以说是模型在总体样本上的误差。对于一个好的模型应该是经验误差约等

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

  在机器学习中,我们将模型在训练集上的误差称之为训练误差,又称之为经验误差,在新的数据集(比如测试集)上的误差称之为泛化误差,泛化误差也可以说是模型在总体样本上的误差。对于一个好的模型应该是经验误差约等于泛化误差,也就是经验误差要收敛于泛化误差,根据霍夫丁不等式可知经验误差在一定条件下是可以收敛于泛化误差的。

  当机器学习模型对训练集学习的太好的时候(再学习数据集的通性的时候,也学习了数据集上的特性,这些特性是会影响模型在新的数据集上的表达能力的,也就是泛化能力),此时表现为经验误差很小,但往往此时的泛化误差会很大,这种情况我们称之为过拟合,而当模型在数据集上学习的不够好的时候,此时经验误差较大,这种情况我们称之为欠拟合。具体表现如下图所示,第一幅图就是欠拟合,第三幅图就是过拟合。

  机器学习中常见的过拟合解决方法

  再如下面这幅图所示,只要我们愿意,在训练集上的误差是可以无限小的,但是此时的泛化误差会增大。

  机器学习中常见的过拟合解决方法

  对于欠拟合的问题比较好处理,只要增大模型的复杂度就行,而且欠拟合会在训练过程中就表现出来(通过看训练集的损失来判断),更容易去控制。对于过拟合不会体现在训练集上,因此常见的方式是采用交叉验证来检测过拟合。解决过拟合的两条主线:一是增大数据集,二是降低模型的复杂度(根据VC维理论可知)。一般来说扩展数据集是比较难的,而且数据集大,模型复杂度高的时候即使能获得好的泛化结果,也会增大计算量。所以常见的方式都是以降低模型的复杂度为主,接下来看看有哪些常见的方法可以自适应地降低模型的复杂度。

1、正则化

  正则化是机器学习中最常见的过拟合解决方法,在损失函数中加入正则项来惩罚模型的参数,以此来降低模型的复杂度,常见的添加正则项的正则化技术有L1,L2正则化。

  L1正则化

  机器学习中常见的过拟合解决方法

  L1正则化是基于L1范数的,J是我们的损失函数,在损失函数优化时,我们要使得损失函数无限小,要满足这个结果,表达式中的第二项也必须无限小。关于L1正则化项的函数可以在二维平面图中表示出来,令

   机器学习中常见的过拟合解决方法

 

  机器学习中常见的过拟合解决方法

  图中的等值线(就是那些曲线)是J0的等值线,黑色方形是正则项函数L的图形。在图中。当J0等值线和L图形首次相交的地方就是最优解(根据拉格朗日约束问题的最小值可知,L函数可以看作J0函数的约束,没有该约束,J0函数的最小值应该是最里面的等值线,加上约束之后,就是首次相交的点处),从图中可以看出在相交点这里有w1为0,这也是L1正则的特点。加入L1正则项之后,数据集中那些对模型贡献不大的特征所对应的参数w可以为0,因此L1正则项得出的参数是稀疏的。

  L2正则化

  机器学习中常见的过拟合解决方法

  同样可以画出在二维平面中的图形来描述

  机器学习中常见的过拟合解决方法

  原理和L1正则中差不多,但是L2正则化不会获得稀疏解,只会将对模型贡献不大的特征所对应的参数置于无限小的值,以此来忽略该特征对模型的影响。

  因此正则化都是在通过控制模型参数的大小来降低模型的复杂度。

 

2、剪枝处理

  剪枝是决策树中一种控制过拟合的方法,我们知道决策树是一种非常容易陷入过拟合的算法,剪枝处理主要有预剪枝和后剪枝这两种,常见的是两种方法一起使用。预剪枝通过在训练过程中控制树深、叶子节点数、叶子节点中样本的个数等来控制树的复杂度。后剪枝则是在训练好树模型之后,采用交叉验证的方式进行剪枝以找到最优的树模型。

 

3、提前终止迭代(Early stopping)

  该方法主要是用在神经网络中的,在神经网络的训练过程中我们会初始化一组较小的权值参数,此时模型的拟合能力较弱,通过迭代训练来提高模型的拟合能力,随着迭代次数的增大,部分的权值也会不断的增大。如果我们提前终止迭代可以有效的控制权值参数的大小,从而降低模型的复杂度。

 

4、权值共享

  权值共享最常见的就是在卷积神经网络中,权值共享的目的旨在减小模型中的参数,同时还能较少计算量。在循环神经网络中也用到了权值共享。

 

5、增加噪声

  这也是深度学习中的一种避免过拟合的方法(没办法,深度学习模型太复杂,容易过拟合),添加噪声的途径有很多,可以在输入数据上添加,增大数据的多样性,可以在权值上添加噪声,这种方法类似于L2正则化。

 

6、Batch Normalization

  BM算法是一种非常有用的正则化方法,而且可以让大型的卷积神经网络快速收敛,同时还能提高分类的准确率,而且可以不需要使用局部响应归一化处理,也可以不需要加入Dropout。BM算法会将每一层的输入值做归一化处理,并且会重构归一化处理之后的数据,确保数据的分布不会发生变化。

  而且有很多变种,比如Layer Normalization,在RNN或者Transformer中用的比较多。

  上面的几种方法都是操作在一个模型上 ,通过改变模型的复杂度来控制过拟合。另一种可行的方法是结合多种模型来控制过拟合。

 

7、Bagging和Boosting

  Bagging和Boosting是机器学习中的集成方法,多个模型的组合可以弱化每个模型中的异常点的影响,保留模型之间的通性,弱化单个模型的特性。

 

8、Dropout

  Dropout是深度学习中最常用的控制过拟合的方法,主要用在全连接层处。Dropout方法是在一定的概率上(通常设置为0.5,原因是此时随机生成的网络结构最多)隐式的去除网络中的神经元,具体如下图

  机器学习中常见的过拟合解决方法

  Dropout控制过拟合的思想和机器学习中的集成方法中的bagging类似,在每个batch更新的网络结构都有所不同,也就相当于在训练时有很多个不同的子网络,在每次迭代时dropout的神经元都不一样,因此对于整个模型参数而言,每次都会有一些参数不被训练到。Dropout会导致网络的训练速度慢2、3倍,而且数据小的时候,Dropout的效果并不会太好。因此只会在大型网络上使用。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/167077.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 腾讯早期投资人_腾讯大涨

    腾讯早期投资人_腾讯大涨腾讯“炒基”帝国崛起?作者l大钊排版l勤燐电影《华尔街》里有句经典台词叫,“资本永不眠”。那资本如何不眠呢,无非就是“以钱生钱”,经济基础决定上层建筑,靠庞大的金融帝国撑起更大的商业梦想。近日,深圳证监局发布关于核准腾安基金销售(深圳)有限公司证券投资基金销售业务资格的批复。而腾讯集团相关负责人在接受《国际金融报》记者采访时表示,腾安基金销售(深圳)有限公司是腾讯全资控股的独立基金销售机构,以腾讯理财通平台为基础,开展基金销售业务。拿下第三方基金销售牌照后,腾讯在金融领域就已完成了第三

    2022年9月23日
    3
  • 什么是正则化_lo正则化求解方式

    什么是正则化_lo正则化求解方式COUTCutout[1]是一种新的正则化方法。原理是在训练时随机把图片的一部分减掉,这样能提高模型的鲁棒性。它的来源是计算机视觉任务中经常遇到的物体遮挡问题。通过cutout生成一些类似被遮挡的物体,不仅可以让模型在遇到遮挡问题时表现更好,还能让模型在做决定时更多地考虑环境(context)。Theimplementationofcout1.自己码importtorchimpo…

    2022年9月16日
    3
  • 关于Pytorch中双向LSTM的输出表示问题

    关于Pytorch中双向LSTM的输出表示问题在使用pytorch的双向LSTM的过程中,我的大脑中蒙生出了一个疑问。双向的lstm的outputs的最后一个状态与hidden,两者之间肯定有所联系,但具体是什么样子的呢?会不会hidden状态存储的就是outputs的最后一个状态,这样的话,岂不是会导致hidden并不能表示整个序列的双向信息吗?带着这个疑问,我开始了实验。具体的实验代码,这里就不放了。直接放实验结果吧。output_size:torch.Size([14,32,100])hidden_size:torch.S

    2022年6月22日
    68
  • 亲测解决 :Navigation cancelled from “xxx“ to “xxx“ with a new navigation

    亲测解决 :Navigation cancelled from “xxx“ to “xxx“ with a new navigation使用vue3.0写了一个登入页面,再点击登入的时候,第一次点击会没有反应,F12查看接口都调用了但是没有跳转,控制台打印出错:错误说有异常没有捕获;这个错误是vue-router内部的错误,没有进行catch处理导致的;再vue-router3.0以上的版本新增功能:push和replace方法会返回一个promise;解决方案:在vue的router的js中添加下面代码constoriginalPush=VueRouter.prototype.pushconstorigin

    2022年7月26日
    10
  • Ubuntu17.04配置SSH服务[通俗易懂]

    Ubuntu17.04配置SSH服务[通俗易懂]ssh是一种安全协议,主要用于给远程登录会话数据进行加密,保证数据传输的安全,现在介绍一下如何在Ubuntu17.04上安装和配置ssh.方法和步骤一、配置ssh服务1、更新源列表打开”终端窗口”terminal,输入”sudoapt-getupdate”–>回车–>”输入当前登录用户的管理员密码”–>回车,就可以了。更新可能需要等待一两分钟。…

    2022年9月2日
    3
  • 给在读研究生&未来要读研同学们的一封受益匪浅的信

    给在读研究生&未来要读研同学们的一封受益匪浅的信读研首先要改变的是自己的心理状态,说起来简单,但实际上很困难。不过既然已经上了研,就不要抱怨了,努力想想自己该干啥才是王道。首先需要明确几种好的心态。(仅以此文使自己进步,时时规范自己的行为。谦虚使人进步,骄傲使人落后。)当你上课感觉就像打酱油时,当你对研究生很迷茫时,当你坐在电脑前孜孜不倦时,请看下面的文章,很受用,至少我心里现在没有以前浮躁。好的文章有时能改变一个人的精神状态,下面就是…

    2022年5月15日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号