过拟合和欠拟合
概念
机器学习中一个重要的话题便是模型的泛化能力,泛化能力强的模型才是好模型,对于训练好的模型,若在训练集表现差,在测试集表现同样会很差,这可能是欠拟合导致。
欠拟合是指模型拟合程度不高,数据距离拟合曲线较远,或指模型没有很好地捕捉到数据特征,不能够很好地拟合数据。
而过拟合则是模型能够非常好的拟合训练数据,但在新的数据集上的表现非常糟糕,说明模型过于复杂,泛化能力差。
偏差和方差
- 偏差度量了学习算法的期望预测与真实结果的偏离程序, 即刻画了学习算法本身的拟合能力。
- 方差度量了同样大小的训练集的变动所导致的学习性能的变化, 即刻画了数据扰动所造成的影响。
因此,模型的巡礼过程可以分为三个阶段去理解过拟合、欠拟合与偏差和方差之间的关系。
- 给定一个学习任务,在训练初期,由于训练不足,学习器的拟合能力不够强,偏差比较大,也是由于拟合能力不强,数据集的扰动也无法使学习器产生显著变化,也就是欠拟合的情况。
- 随着训练程度的加深,学习器的拟合能力逐渐增强,训练数据的扰动也能够渐渐被学习器学到。
- 充分训练后,学习器的拟合能力已非常强,训练数据的轻微扰动都会导致学习器发生显著变化,当训练数据自身的、非全局的特性被学习器学到了,则将发生过拟合。
设 Etrain 为训练集的误差, Ecv 为交叉验证集误差,则有:
- 高偏差: Etrain 和 Ecv 都很大,且 Etrain ≈ Ecv,对应欠拟合。
- 高方差:Etrain 较小,Ecv 远大于 Etrain,对应过拟合。
即高偏差对应着欠拟合,此时 Etrain 也较大,可以理解为对任何新数据(不论其是否属于训练集),都有着较大的 Ecv 误差,偏离真实预测较大。而高方差对应着过拟合,此时 Etrain 很小,对于新数据来说,如果其属性与训练集类似,它的 Ecv 就会小些,如果属性与训练集不同, Ecv 就会很大,因此有一个比较大的波动,因此说是高方差。
判断方法 —— 学习曲线:就是通过画出不同训练集大小时训练集和交叉验证的准确率,可以看到模型在新数据上的表现,进而来判断模型是否方差偏高或偏差过高,以及增大训练集是否可以减小过拟合。学习曲线的横轴为训练样本的数量,纵轴为准确率。
学习曲线
当训练集和测试集的误差收敛但却很高时,为高偏差。 左上角的偏差很高,训练集和验证集的准确率都很低,很可能是欠拟合。 我们可以增加模型参数,比如,构建更多的特征,减小正则项。 此时通过增加数据量是不起作用的。
当训练集和测试集的误差之间有大的差距时,为高方差。 当训练集的准确率比其他独立数据集上的测试结果的准确率要高时,一般都是过拟合。 右上角方差很高,训练集和验证集的准确率相差太多,应该是过拟合。 我们可以增大训练集,降低模型复杂度,增大正则项,或者通过特征选择减少特征数。
理想情况是是找到偏差和方差都很小的情况,即收敛且误差较小。
过拟合的解决方法
正则化:指的是在目标函数后面添加一个正则化项,一般有 L1 正则化与 L2 正则化。L1 正则是基于 L1 范数,即在目标函数后面加上参数的 L1 范数和项,即参数绝对值和。L2 正则是基于 L2 范数,即在目标函数后面加上参数的 L2 范数和项,即参数的平方。
数据集扩增:通俗得讲,数据机扩增即需要得到更多的符合要求的数据,即和已有的数据是独立同分布的,或者近似独立同分布的。一般有以下方法:
- 从数据源头采集更多数据;
- 复制原有数据并加上随机噪声;
- 重采样。
DropOut:而在神经网络中,有一种方法是通过修改神经网络本身结构来实现的,其名为 Dropout。
该方法是在对网络进行训练时用一种技巧(trick)。在训练开始时,随机得删除一些(可以设定为一半,也可以为 1/3,1/4 等)隐藏层神经元,即认为这些神经元不存在,同时保持输入层与输出层神经元的个数不变。然后按照 BP 学习算法对神经网络中的参数进行学习更新,下一次迭代中,同样随机删除一些神经元,与上次不一样,做随机选择。这样一直进行下去,直至训练结束。
欠拟合的解决方法
- 添加特征项,模型出现欠拟合的时候是因为特征项不够导致的,可以添加其他特征项来很好地解决。
- 添加多项式特征,例如将线性模型通过添加二次项或者三次项使模型泛化能力更强。
- 减少正则化参数,正则化的目的是用来防止过拟合的,当模型出现了欠拟合,则需要减少正则化参数。