过拟合
(1)什么是过拟合?
模型学习能力太强,以至于把噪声数据的特征也学习到了,导致模型泛化能力下降,在训练集上表现很好,但是在测试集上表现很差。
(2)过拟合出现的原因:
- 训练集的数量级和模型的复杂度不匹配。训练集的数量级要小于模型的复杂度;
- 训练集和测试集特征分布不一致;
- 样本里的噪音数据干扰过大,大到模型过分记住了噪音特征,反而忽略了真实的输入输出间的关系;
- 权值学习迭代次数足够多,拟合了训练数据中的噪声和训练样例中没有代表性的特征。
- 决策树模型。如果我们对于决策树的生长没有合理的限制和修剪的话,决策树的自由生长有可能每片叶子里只包含单纯的事件数据或非事件数据,可以想象,这种决策树当然可以完美匹配(拟合)训练数据,但是一旦应用到新的业务真实数据时,效果是一塌糊涂。
- 神经网络模型。
- 由于对样本数据,可能存在隐单元的表示不唯一,即产生的分类的决策面不唯一. 随着学习的进行, BP算法使权值可能收敛过于复杂的决策面,并至极致.
- 权值学习迭代次数足够多(Overtraining),拟合了训练数据中的噪声和训练样例中没有代表性的特征.
(3)解决方法:
- simpler model structure:调小模型复杂度,使其适合自己训练集的数量级(缩小宽度和减小深度)
- data augmentation(数据增强):训练集越多,过拟合的概率越小。在计算机视觉领域中,增广的方式是对图像旋转,缩放,剪切,添加噪声等
- regularization:参数太多,会导致我们的模型复杂度上升,容易过拟合,也就是我们的训练误差会很小。正则化是指通过引入额外新信息来解决机器学习中过拟合问题的一种方法。这种额外信息通常的形式是模型复杂性带来的惩罚度。正则化可以保持模型简单,另外,规则项的使用还可以约束我们的模型的特性。
- Dropout:这个方法在神经网络里面很常用。dropout方法是ImageNet中提出的一种方法,通俗一点讲就是dropout方法在训练的时候让神经元以一定的概率不工作。即在训练时候以一定的概率p来跳过一定的神经元。
- early stopping:对模型进行训练的过程即是对模型的参数进行学习更新的过程,这个参数学习的过程往往会用到一些迭代方法,如梯度下降(Gradient descent)学习算法。Early stopping便是一种迭代次数截断的方法来防止过拟合的方法,即在模型对训练数据集迭代收敛之前停止迭代来防止过拟合。
- Ensemble:集成学习算法也可以有效的减轻过拟合。Bagging通过平均多个模型的结果,来降低模型的方差。Boosting不仅能够减小偏差,还能减小方差。
- (针对DNN)batch normalization:即BN,既能够提高泛化能力,又大大提高训练速度,现在被广泛应用在DNN中的激活层之前。
欠拟合
(1)什么是欠拟合?
欠拟合就是模型没有很好地捕捉到数据特征,不能很好地拟合数据,表现在模型过于简单
(2)解决方法:
- 增加新特征,可以考虑加入特征组合、高次特征,来增大假设空间;有时候我们模型出现欠拟合的时候是因为特征项不够导致的,可以添加其他特征项来很好地解决。例如,“组合”、“泛化”、“相关性”三类特征是特征添加的重要手段,无论在什么场景,都可以照葫芦画瓢,总会得到意想不到的效果。除上面的特征之外,“上下文特征”、“平台特征”等等,都可以作为特征添加的首选项。
- 添加多项式特征,这个在机器学习算法里面用的很普遍,例如将线性模型通过添加二次项或者三次项使模型泛化能力更强;
- 减少正则化参数,正则化的目的是用来防止过拟合的,但是模型出现了欠拟合,则需要减少正则化参数;
- 使用非线性模型,比如核SVM、决策树、深度学习等模型;
- 调整模型的容量(capacity),通俗地,模型的容量是指其拟合各种函数的能力。
- 容量低的模型可能很难拟合训练集;使用集成学习方法,如Bagging ,将多个弱学习器Bagging。
过拟合与欠拟合的区别
欠拟合在训练集和测试集上的性能都较差,而过拟合往往能较好地学习训练集数据的性质,而在测试集上的性能较差。
在神经网络训练的过程中,欠拟合主要表现为输出结果的高偏差,而过拟合主要表现为输出结果的高方差。