过拟合(overfitting)
概念
过拟合是模型参数在拟合过程中出现的问题,由于训练数据包含抽样误差,训练时复杂的模型将抽样误差也考虑在内,将抽样误差也进行了很好的拟合。
现象
具体表现:模型在训练集上效果好,在测试集上效果差,即模型泛化能力弱。
原因
产生过拟合根本原因:
(1)观察值与真实值存在偏差
训练样本的获取,本身就是一种抽样,抽样操作就会存在误差,导致选取的样本数据不足以代表预定的分类规则。
(2)训练数据太少,导致无法描述问题的真实分布
通俗地说,重复实验多次,随机事件的频率近似于它的概率,即当样本量大了,真实规律是必然出现的。
(3)数据有噪声
有噪音时,更复杂的模型会尽量去覆盖噪音点,即对数据过拟合,扰乱了预设的分类规则。
(4)训练模型过度,导致模型非常复杂
模型强大到连噪声都学会了。参数太多,模型复杂度过高。
(5)假设的模型无法合理存在,或者说是假设成立的条件实际并不成立
(6)对于决策树模型,如果我们对于其生长没有合理的限制,其自由生长有可能使节点只包含单纯的事件数据(event)或
非事件数据(no event),使其虽然可以完美匹配(拟合)训练数据,但是无法适应其他数据集
对于神经网络模型:a)对样本数据可能存在分类决策面不唯一,随着学习的进行,BP算法使权值可能收敛过于复杂的决策
面;b)权值学习迭代次数足够多(Overtraining),拟合了训练数据中的噪声和训练样例中没有代表性的特征
解决方法
(1)数据处理:清洗数据、减少特征维度、类别平衡;
1、清洗数据:纠正错误的label或删除错误数据
2、降维
3、类别平衡
[参考](https://www.cnblogs.com/CJT-blog/p/10223157.html)
(2)辅助分类节点(auxiliary classifiers)
Google Inception-V1中,采用了辅助分类节点,即将中间某一层的输出用作分类,并按一个较小的权重加到最终的分类
结果中,这样相当于做了模型的融合,同时给网络增加了反向传播的梯度信号,提供了额外的正则化。
(3)正则化:
(1. 获取更多数据:从数据源获得更多数据,或数据增强;
(2. L2、L1、BN层等,L1正则还可以自动进行特征选择;
(3. 使用合适的模型(减少网络的层数、神经元个数等,限制权重过大),限制网络的拟合能力,避免模型过于复杂;
(4. 增加噪声:输入时增加噪声+权重上(高斯初始化);
(5. 多种模型结合: Bagging集成学习的思想和其他集成模型,例随机森林模型;
(6. 随机失活(Dropout):随机从网络中去掉一部分隐神经元,或weight decy;
(7. 限制训练时间、次数、以及早停止;
(8. 使用正则化参数/项,防止过拟合;
(9. 逐层归一化(Batch Normalization),即给每层输出做归一化(相当于加了一个线性变换层),
使得下一层的输入相当于高斯分布(正态分布),此方法相当于下一层的权重参数训练时避免了输入以偏概全。
(10.数据增强(data augmention)
(11.合适的模型(simpler model structure)
(12.交叉检验,通过交叉检验得到较优的模型参数;
(13.如果有正则项则可以考虑增大正则项参数 lambda;
(14.特征选择,减少特征数或使用较少的特征组合,对于按区间离散化的特征,增大划分的区间;
···
欠拟合(Underfitting)
现象
训练模型
在训练集上表现很差,
在验证集上面的表现也很差。
原因
模型发生欠拟合的最本质原因是“训练的模型太简单,最通用的特征模型都没有学习到”。
表象原因是模型复杂度过低、特征量过少等。
解决方法
1. 做特征工程,添加更多的特征项,即提供的特征不能表示出那个需要的函数。
2. 减少/减小正则化参数,使模型复杂一些;
3. 使用更深或者更宽的模型,增加网络层数和层神经元个数,从数据中挖掘出更多的特征
4. 使用集成方法。融合几个具有差异的弱模型,使其成为一个强模型;容量低的模型可能很难拟合训练集;
使用集成学习方法,将多个弱学习器Bagging;Boosting 往往会有较小的 Bias,比如 Gradient Boosting 等。
5. 有时还需对特征进行变换,使用组合特征和高次特征,来增大假设空间。
6. 增加模型复杂度,使用非线性模型。模型简单也会导致欠拟合,例线性模型只能拟合一次函数的数据,
尝试使用更高级的模型将有助于解决欠拟合,如使用核SVM 、决策树、深度学习等模型。
7.添加其他特征项;有时模型出现欠拟合是因为特征项不够导致的。例,“组合”、“泛化”、“相关性”三类特征是特征添加的重
要手段,无论在什么场景,都可以照葫芦画瓢,总会得到意想不到的效果。除上面的特征之外,“上下文特征”、
“平台特征”等,都可以作为特征添加的首选项。
8.添加多项式特征;在机器学习算法里面用的很普遍,例如将线性模型通过添加二次项或者三次项使模型泛化能力更强。
9.增大数据量
10.调整模型的容量(capacity),通俗地,模型的容量是指其拟合各种函数的能力
11.调整参数和超参数
• 超参数包括:
- 神经网络中:学习率、学习衰减率、隐藏层数、隐藏层的单元数、Adam优化算法中的β1和β2参数、batch_size数值等
- 其他算法中:随机森林的树数量,k-means中的cluster数,正则化参数λ等
总结:
- 机器学习的基本问题是利用模型对数据进行拟合,学习的目的并非是对有限训练集进行正确预测,而是对未曾在训练集合出现的样本能够正确预测。
- 模型对训练集数据的误差称为经验误差,对测试集数据的误差称为泛化误差。
- 模型对训练集以外样本的预测能力就称为模型的泛化能力,追求这种泛化能力始终是机器学习的目标。
- 过拟合(overfitting)和欠拟合(underfitting)是导致模型泛化能力不高的两种常见原因,都是模型学习能力与数据复杂度之间失配的结果。