过拟合现象,原因,以及降低过拟合的方法

一、什么是过拟合,为什么要避免过拟合

过拟合现象,原因,以及降低过拟合的方法_第1张图片

图1.1 Overfit&Normal
上图是一张使用线性回归拟合二维样本数据的matlab输出图片,其中Normal曲线是使用使用了带参数空间限制的最小二乘法进行求解的模型,Overfit曲线是使用最小二乘法直接求解得到的。 可以看到虚线输出的模型可能并不是我们现实生活中所想要的模型,当我们得到Overfit所学的模型后,用于实际回归任务中,可能对于验证集、测试集、预测集效果并不好。它会产生这样一种现象:**一个假设在训练数据上能够获得比其他假设更好的拟合,但是在训练数据外的数据集上却不能很好的拟合数据**。此时我们就叫这个假设出现了**过拟合**的现象。

过拟合现象,原因,以及降低过拟合的方法_第2张图片

图1.2 随着多项式维数的增加交叉验证集经验误差的变化
如图1.2所示,以多项式拟合举例,其随着多项式维数的增加,模型在训练集上的表现越来越好,但在交叉验证集上的误差却越来越大,这显然不是我们想要的,因为其泛化能力和鲁棒性也越来越差。

二、过拟合产生的原因

过拟合现象,原因,以及降低过拟合的方法_第3张图片

图2.1 Bias/Variance

偏差/方差欠拟合/过拟合有着密不可分的关系,我们现在讨论如图2.1中右下角的低偏差高方差即只有过拟合现象的原因。
1.数据集样本数过少
如图2.1右下图所示,当样本较少且不是簇型的时候,此时的模型可能因四周“对称”带来的误差累积为0,也就是对测试样本拟合的很“完美”,但若再增加一个样本,则可能模型的误差会增加很多,拟合效果会很差。
2.算法模型为了更好的拟合样本集,使其模型的拟合能力超过远远超过了问题复杂度,也就是学习模型过于复杂
对于线性回归问题来说,也就是多项式次数过高的问题;对于神经网络来说,网络结构过于复杂,单层节点数过多等也可能造成过拟合,以做过的一个图像识别项目举例,如图2.2所示,原学习目标是想检测完整的轿车,但分类器训练的结果却是将后视镜部分当作了轿车,原因是当时训练的stage过多,将轿车的细化特征学习过多以至于出现过拟合现象。
过拟合现象,原因,以及降低过拟合的方法_第4张图片

图2.2 图像识别中的过拟合现象

3.样本中数据噪声干扰过大,大到模型过分记住了噪声特征,而忽略了真实的输入输出间的关系。

三、如何降低过拟合

1.(针对问题1)解决过拟合的根本方法是增加数据集的规模,理论上只要样本数足够多,即使模型足够复杂,有一定的噪声,模型也会收敛到一个比较好的结果。
实际中由于数据集采集成本过高,通常使用一些退而求其次的方法来制造数据集,比如在图像处理中,可以利用反转、平移、切割、调整光亮,使用不同滤波来扩充数据集。
而在模型的训练阶段,为了节省数据成本,我们会采取诸如留一法、交叉验证法、自助法等用于数据采样。
2.(针对问题2)对于模型过于复杂,我们可以做的事情很多。
2.1使模型本身简单化
对于线性回归我们可以降低多项式的次数,对于神经网络我们可以减少隐藏层层数,节点数等,对于决策树,我们可以进行剪枝操作等。

2.2正则化
正则化是解决过拟合最常用的方法之一,最为常用的用为L1正则化与L2正则化。L0可以最自然的实现“稀疏约束”,但其求解性质不太良好,利用L1范数是L0范数的最优凸近似,又有较好的求解特性(可利用近端梯度下降求解),因此可以得到较为稀疏的解,利用L2范数进行正则化则可以大大降低计算量,拥有计算方便的特性。
过拟合现象,原因,以及降低过拟合的方法_第5张图片

图2.3 高斯核模型L2约束的最小二乘学习法运用(改变带宽与正则化参数)

2.3 对于神经网络,我们可以采用增加Drop层(在每层中随机选取一些节点使其不工作),或是添加Batch Normalization来减轻过拟合现象。

2.4进行特征选择与稀疏学习,常见的特征选择可分为分为1)过滤式,2)包裹式,3)嵌入式稀疏表示可以使大多数问题变得线性可分,且稀疏样本可以给存储带来方便,稀疏表示可以通过字典学习等方式得到,它可以将样本转化为合适的稀疏表示,从而使学习任务得以简化,模型复杂度降低。
3.(针对问题三)在进行数据训练进行之前进行数据清洗,即在回归任务中删除异常的噪声点,在分类任务中将错误的label进行纠正。

以上为个人在机器学习、深度学习以及代码实现中关于过拟合现象的一些浅薄认识,如有不妥之处肯请各位包涵指正。

你可能感兴趣的:(过拟合,机器学习,深度学习)