如何处理欠拟合、过拟合?

来源:CSDN 浏览量:297 发布时间:2018-12-27 21:37:46

在我们机器学习和深度学习的训练过程中,经常会出现过拟合和欠拟合的现象。训练一开始,模型通常会欠拟合,所以会对模型进行优化,然而等到训练到一定程度的时候,就需要解决过拟合的问题了。


如何判断过拟合呢?我们在训练过程中会定义训练误差,验证集误差,测试集误差(泛化误差)。训练误差总是减少的,而泛化误差一开始会减少,但到一定程序后不减反而增加,这时候便出现了过拟合的现象。


如下图所示,从直观上理解,欠拟合就是还没有学习到数据的特征,还有待继续学习,而过拟合则是学习进行的太彻底,以至于把数据的一些局部特征或者噪声带来的特征都给学到了,所以在进行测试的时候泛化误差也不佳。


1.png


如何处理欠拟合

欠拟合是由于学习不足,可以考虑添加特征,从数据中挖掘出更多的特征,有时候还需要对特征进行变换,使用组合特征和高次特征。


模型简单也会导致欠拟合,例如线性模型只能拟合一次函数的数据。尝试使用更高级的模型有助于解决欠拟合,如使用SVM,神经网络等。


正则化参数是用来防止过拟合的,出现欠拟合的情况就要考虑减少正则化参数。


如何处理过拟合

过拟合是由于学习的太彻底,这可能是由于训练数据量太少的缘故。可以增大数据的训练量,训练数据要足够大才能使得数据中的特征被模型学习到。还需要清洗数据,尽量减少数据中的噪声,以防止这些噪声被模型学习到。


正则化方法也常用来处理过拟合,正则化包括L1正则化和L2正则化,正则项通常是一个范数。L1范数是指向量中各个元素绝对值之和,也叫“稀疏规则算子”,通常可以用来做特征选择,在嵌入式特征选择使用的就是L1范数。L2范数是指向量各元素的平方和然后求平方根,通常的结果会使权重参数变小,使得模型的复杂度变低,符合奥卡姆剃刀原则,以防止过拟合。


在神经网络中经常使用Dropout方法,或者称之为随机失活,每次训练的时候随机去掉一部分隐藏层的神经元,可以理解为每个神经元随机参与,相当于多个模型集成。


提前终止(early stoppping)也是神经网络常使用的方法,可以防止模型复杂度过于增加,从而防止过拟合。采用交叉验证提前终止,当交叉验证错误率最小时认为泛化性能最好,这时即使训练集错误率仍然下降,也终止训练。


逐层归一化(batch normalization),给每层的输出做归一化(相当于加了一个线性变换层),这样使得下一层的输入相当于高斯分布(正态分布),这个方法相当于下一层的权重参数训练时避免了其输入以偏概全, 因而泛化效果也比较好。


不过,数据在训练过程中始终是最重要的,有时候往往拥有更多的数据胜过一个好的模型,这要求得到更多独立同分布的数据来进行训练。

--------------------- 

原文:https://blog.csdn.net/Liziwepdl/article/details/85019999