分布~定义~原因(抽样,噪音,假设,参数,决策树)~方法(数据(增大,降维),模型(合EDR集B剪))
一、过拟合产生的原因
机器学习过程大多是基于历史数据,建立模型,对未知数据进行预测,其中有个前提是假设数据满足独立同分布,但是一般独立同分布的假设往往不成立,即数据的分布可能会发生变化(distribution drift)
并且可能当前的数据量过少,不足以对整个数据集进行分布估计,因此往往需要防止模型过拟合,提高模型泛化能力
所谓过拟合:当一个模型过于复杂之后,它可以很好的‘记忆’训练数据中随机噪音的部分而忘记去‘学习‘训练集中通用的趋势
那么过拟合产生的原因有哪些呢?
1)建模样本抽取错误
包括(但不限于)样本数量太少,抽样时没有足够正确考虑业务场景或业务特点,等等导致抽出的样本数据不能有效足够代表业务场景
2)样本里的噪音数据干扰过大
模型过分记住了噪音特征,反而忽略了真实的输入输出间的关系
3)建模时的“逻辑假设”到了模型应用时已经不能成立
任何预测模型都是在假设的基础上才可以搭建和应用的,常用的假设包括:假设建模数据与后来的应用数据是相似的等等。如果上述假设与实际情况不符,根据这些假设搭建的模型当然是无法有效应用的
4)参数太多、模型复杂度高
5)决策树模型
决策树的生长没有合理的限制和修剪,可能导致每片叶子里只包含单纯的事件数据(event)或非事件数据(no event),可以想象,这种决策树当然可以完美拟合训练数据,但是一旦应用到新的业务真实数据时,效果是一塌糊涂
二、如何防止过拟合
发生过拟合主要有两方面的原因,下面就从数据和模型复杂度来考虑
a)数据
1) 增大数据的训练集
2) 数据降维
b)模型
1)使用合适的模型:对于神经网络来讲,可以减少网络层数及神经元个数
2)训练时间的把控:Early stopping
3)Dropout:这是一个很高效的方法,在训练时,每次随机(如50%)忽略隐层的某些节点
神经网络中,有一种过拟合处理方法是通过修改神经网络本身结构来实现的,其名为Dropout。该方法是在对网络进行训练时用一种技巧(trick),对于如下所示的三层人工神经网络:
对于上图所示的网络,在训练开始时,随机得删除一些(可以设定为一半,也可以为1/3,1/4等)隐藏层神经元,即认为这些神经元不存在,同时保持输入层与输出层神经元的个数不变,这样便得到如下的神经网络:
然后按照BP学习算法对修改的神经网络中的参数进行学习更新(虚线连接的单元不更新,因为认为这些神经元被临时删除了)。这样一次迭代更新便完成了。下一次迭代中,同样随机删除一些神经元,与上次不一样,做随机选择
Dropout方法是通过修改神经网络隐藏层的神经元个数来防止过拟合的
4)正则化(regularization):L1或L2
5)考虑集成的方法,结合多种模型:训练多个模型,以每个模型的平均输出作为结果。如Bagging和随机森林,Boosting如GBDT,XGBoost
6)Batch normalization
7)决策树的剪枝