过拟合与欠拟合
过拟合
概念:过拟合是模型参数在拟合过程中出现的问题,由于训练数据包含抽样误差,训练时复杂的模型将抽样误差也考虑在内,将抽样误差也进行了很好的拟合。
具体表现:模型在训练集上效果好,在测试集上效果差,即模型泛化能力弱。
产生过拟合根本原因:
- 观察值与真实值存在偏差
训练样本的获取,本身就是一种抽样,抽样操作就会存在误差,导致选取的样本数据不足以代表预定的分类规则。 - 训练数据太少,导致无法描述问题的真实分布
通俗地说,重复实验多次,随机事件的频率近似于它的概率,即当样本量大了,真实规律是必然出现的。 - 数据有噪声
有噪音时,更复杂的模型会尽量去覆盖噪音点,即对数据过拟合,扰乱了预设的分类规则。 - 训练模型过度,导致模型非常复杂
模型强大到连噪声都学会了。参数太多,模型复杂度过高。
解决方法
1)清洗数据(纠正错误的label或删除错误数据);
2)减少数据特征维度,降维;
3)使类别平衡;
4)获取更多数据:从数据源获得更多数据,或数据增强;
5)正则化,L2、L1、BN层等
6)使用合适的模型(减少网络的层数、神经元个数等,限制权重过大),限制网络的拟合能力,避免模型过于复杂;
7)多种模型结合,集成学习的思想;
8)随机失活(Dropout):随机从网络中去掉一部分隐神经元;
9)限制训练时间、次数、以及早停止;
10)交叉验证
欠拟合
现象:在训练集和验证集上的表现都很差
原因:最本质原因是“训练的模型太简单,最通用的特征模型都没有学习到”。表象原因是模型复杂度过低、特征量过少等。
解决办法
1)做特征工程,添加更多的特征项;
2)减少/减小正则化参数,使模型复杂一些;
3)使用更深或者更宽的模型,增加网络层数和层神经元个数;
4)使用集成学习。融合几个具有差异的弱模型,使其成为一个强模型;
5)增加模型复杂度,使用非线性模型;
6)添加其他特征,如多项式特征、不同组合特征;
7)增大数据量;
8)调整参数和超参数