过拟合和欠拟合问题总结
一、过拟合问题
1.1 问题定义
过拟合(overfitting)是指在模型参数拟合过程中的问题,由于训练数据包含抽样误差,训练时,复杂的模型将抽样误差也考虑在内,将抽样误差也进行了很好的拟合。具体表现就是最终模型在训练集上效果好;在测试集上效果差。模型泛化能力弱。
1.2 出现过拟合的原因
1. 训练集的数量级和模型的复杂度不匹配。训练集的数量级要小于模型的复杂度;
2. 训练集和测试集特征分布不一致;
3. 样本里的噪音数据干扰过大,大到模型过分记住了噪音特征,反而忽略了真实的输入输出间的关系;
4. 权值学习迭代次数足够多(Overtraining),拟合了训练数据中的噪声和训练样例中没有代表性的特征。
1.3 避免此类问题的手段
- simpler model structure(简化模型):调小模型复杂度,使其适合自己训练集的数量级(缩小宽度和减小深度)
- data augmentation(增加数据):训练集越多,过拟合的概率越小。在计算机视觉领域中,增广的方式是对图像旋转,缩放,剪切,添加噪声等
- regularization(正则化):参数太多,会导致我们的模型复杂度上升,容易过拟合,也就是我们的训练误差会很小。 正则化是指通过引入额外新信息来解决机器学习中过拟合问题的一种方法。这种额外信息通常的形式是模型复杂性带来的惩罚度。 正则化可以保持模型简单,另外,规则项的使用还可以约束我们的模型的特性。有L1和L2两种形式
- dropout(丢失):这个方法在神经网络里面很常用。dropout方法是ImageNet中提出的一种方法,通俗一点讲就是dropout方法在训练的时候让神经元以一定的概率不工作
- early stopping(提前停止):对模型进行训练的过程即是对模型的参数进行学习更新的过程,这个参数学习的过程往往会用到一些迭代方法,如梯度下降(Gradient descent)学习算法。Early stopping便是一种迭代次数截断的方法来防止过拟合的方法(当accuracy不再提高时,就停止训练),即在模型对训练数据集迭代收敛之前停止迭代来防止过拟合。
- ensemble(集成学习算法):也可以有效的减轻过拟合。Bagging通过平均多个模型的结果,来降低模型的方差。Boosting不仅能够减小偏差,还能减小方差。
- 重新清洗数据:数据清洗从名字上也看的出就是把"脏"的"洗掉",指发现并纠正数据文件中可识别的错误的最后一道程序,包括检查数据一致性,处理无效值和缺失值等。导致过拟合的一个原因也有可能是数据不纯导致的,如果出现了过拟合就需要我们重新清洗数据。
二、欠拟合((高偏差))
2.1 问题定义
欠拟合是指模型在训练集、验证集和测试集上均表现不佳的情况
2.2 避免此类问题的手段
- 模型复杂化:对同一个算法复杂化。例如回归模型添加更多的高次项,增加决策树的深度,增加神经网络的隐藏层数和隐藏单元数等;弃用原来的算法,使用一个更加复杂的算法或模型。例如用神经网络来替代线性回归,用随机森林来代替决策树等
- 增加更多的特征:使输入数据具有更强的表达能力:特征挖掘十分重要,尤其是具有强表达能力的特征,往往可以抵过大量的弱表达能力的特征
- 调整参数和超参数:超参数包括:神经网络中:学习率、学习衰减率、隐藏层数、隐藏层的单元数、Adam优化算法中的β1和β2参数、batch_size数值等其他算法中:随机森林的树数量,k-means中的cluster数,正则化参数λ等
- 增加训练数据往往没有用:欠拟合本来就是模型的学习能力不足,增加再多的数据给它训练它也没能力学习好
- 降低正则化约束:正则化约束是为了防止模型过拟合,如果模型压根不存在过拟合而是欠拟合了,那么就考虑是否降低正则化参数λλ或者直接去除正则化项