过拟合解决方法

参考文章:http://blog.csdn.net/heyongluoyao8/article/details/49429629

https://www.zhihu.com/question/59201590/answer/167392763

http://blog.csdn.net/willduan1/article/details/53070777

该文旨在解决建模时遇到过拟合问题,查阅了网上的一些资料,结合本人理解,因此整理总结后方便以后查阅。


在做数据挖掘建模时,我们所使用的是经验模型,即使用已有数据去推测或模拟未知数据。假设数据满足独立同分布,模型建立在已有数据的基础上,于是可以用这个模型去推测未知数据。然而这个假设条件往往不成立,即数据的分布可能会发生变化,或者当前数据量过少,不足以对整个数据集进行分布估计,模型只学到了少部分知识,或者由于训练数据中包含了抽样误差,训练时将抽样误差也考虑在内,使模型将抽样误差进行了很好的拟合造成复杂的模型,却不适用于未知数据。以上情况都会造成过拟合。

为了防止模型过拟合,提高模型的泛化能力,可以采用以下方法:

(1)    扩增数据集

如果训练数据过小,模型只学到了数据集中的小部分知识,则模型只适用于小部分数据,泛化能力较差。因此,为防止过拟合,可以通过扩增数据集实现。

(2)    增加正则项

正则项一般加在损失函数后面,可以避免模型区过分拟合数据,从而降低了模型的复杂度。正则化假设模型参数服从先验概率(从贝叶斯的观点,所有的正则化都是来自于对参数分布的先验),即规定了参数的分布,降低模型的复杂度。(即增加了模型的限制条件,提高了模型的稳定性,稳定性强的模型不会过拟合)。

正则项有L1和L2正则。L1范数是指向量中各个元素绝对值之和,L2范数是指向量各元素的平方和然后求平方根。L1正则是拉普拉斯先验,L2正则则是高斯先验(这个没懂???)

补充介绍先验知识:

先验的意思是对一种未知的东西的假设,比如说我们看到一个正方体的骰子,那么我们会假设他的各个面朝上的概率都是1/6,这个就是先验。但事实上骰子的材质可能是密度不均的,所以还要从数据集中学习到更接近现实情况的概率。同样,在机器学习中,我们会根据一些已知的知识对参数的分布进行一定的假设,这个就是先验。有先验的好处就是可以在较小的数据集中有良好的泛化性能,当然这是在先验分布是接近真实分布的情况下得到的了,从信息论的角度看,向系统加入了正确先验这个信息,肯定会提高系统的性能。(参考:https://www.cnblogs.com/heguanyou/p/7688344.html)

(3)Early Stopping

对模型的训练过程是一个不断迭代参数的过程,early stopping在过拟合之前停止迭代过程,因此可以防止过拟合的发生。具体做法是在对所有的训练数据的一轮训练之后,计算其验证集的准确率,如果该准确率不再提高,则停止训练。但是,我们无法准确判断该准确率是否真正的不再提高,可能经过了一定的下降又提高上去了。一般的做法是:在训练过程中记录到目前为止最好的验证准确率,当连续10次或者更多次没达到最好的准确率时,则可以认为此准确率不可再被提高了。此时可以停止迭代。该策略也被称为“no-imorovement-in-n”, n即训练次数。可以根据实际情况调整未达到最好准确率的次数,如10,20,30、、、、、

(4)Dropout

适用于神经网络的学习。在训练时,随机删除一些(可以设定为1/2,1/3,1/4)隐藏层的神经元,即认为这些神经元不存在,同时保持输入层与输出层神经元个数不变,得到如下ANN:

               

然后按照BP学习算法对ANN中的参数进行学习更新(虚线连接的单元不更新,因为认为这些神经元被临时删除了)。这样一次迭代更新便完成了。下一次迭代中,同样随机删除一些神经元,与上次不一样,做随机选择。这样一直进行瑕疵,直至训练结束。

这意味着神经网络不能完全依赖于任何给定的神经元,因为它可能会死亡(从模型中删除)。一种理解是它可以使得模型某些特征不会只当其它某个特征出现时才起作用,另一种理解是它类似boosting,即每次随机的dropout后是不同的网络。

(5)结合多种模型

模型的bias和Variance会影响过拟合、欠拟合,即bias越大,模型越欠拟合、Variance越大,模型越过拟合。这里多说一点,Variance和bias是tradeoff, 我为了让模型更准(小的bias),往往会导致模型过拟合(大的Variance,即每次判定不稳定)

bagging. (bootstrap aggregation), 采用多次对样本的采样,并行进行多个模型的训练,最终对分类结果进行投票获得最终结果。这中方法可以减小模型的Variance。因为bagging是多个强分类器的组合,每个强分类器的Variance高。 数学上,由于bagging的模型不是完全独立的,因此var(avg(x))/n < bagging < var(avg(x)), 所以可以起到降低Variance的作用。

boosting。串行地进行采样的模型训练,即比如每次取上个模型的错分样本。它是多个弱分类器的组合,每个弱分类器的bias高,组成强分类器后,bias就变低了。由于boosting 是迭代地进行损失最小化,越往后,模型的bias越小。

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值