过拟合:指学习时选择的模型所包含的参数过多,已致于出现这一模型对已知数据预测得很好,但对未知数据预测得很差的现象。
“一个过配的模型试图连误差(噪音)都去解释(而实际上噪音又是不需要解释的),导致泛化能力比较差,显然就过犹不及了。” 这句话很好的诠释了过拟合产生的原因,但我认为这只是一部分原因,另一个原因是模型本身并不能很好地解释(匹配)数据,也就是说观测到的数据并不是由该模型产生的。“统计学家说:我们让数据自己说话。言下之意就是要摒弃先验概率。而贝叶斯支持者则说:数据会有各种各样的偏差,而一个靠谱的先验概率则可以对这些随机噪音做到健壮。事实证明贝叶斯派胜利了,胜利的关键在于所谓先验概率其实也是经验统计的结果。” 事实上贝叶斯本身就是一个基于统计的模型……然而,文中以树后的箱子为例,阐述似然也有选择简单模型的倾向。我对此有疑义。似然是选择与观测最匹配的结果。根据当前的观测结果,显然一个箱子的模型是最符合观测的,也就是说,如果树两边的箱子高矮不一,颜色不同,那么两个箱子的模型就是最匹配的。因此,似然只是选择与观测最匹配的模型,而并没有选择简单模型的倾向。否则,就不会有那么严重的过拟合现象发生。文中还提到:“反之,如果背后的模型是一条直线,那么根据该模型生成一堆近似构成直线的点的概率就大得多了。” 这里的表述有问题,既然已经把模型看成是直线了,那么根据直线模型生成一堆近似构成直线的点的概率是接近1的。同理,我们既然已经认为可以用N-1阶模型去拟合,那么根据N-1阶模型生成的N个点当然就是符合N-1阶模型的,而不需要她去符合直线。 那么问题究竟应该怎样描述呢? 根据作者的意思问题应该这样来描述,一个多项式在平面上随机生成的一堆 N 个点偏偏恰好近似构成一条直线的概率很小很小,然而一条直线在平面上随机生成的一堆N个点(考虑随机误差)能拟合成一个N-1阶曲线的概率是1(一定能用一个N-1阶多项式来拟合)。换句话说,曲线上(N-1阶多项式)随机生成的点能被拟合成直线的概率接近于0,而直线上随机生成的点能被拟合成曲线的概率接近1。因此,若一堆点即能用直线去拟合,也能用N-1阶多项式拟合(必然),那么,他属于直线模型的概率更大。
二. 过拟合的产生
究其原因,产生过拟合是因为:
1.由于对样本数据,可能存在隐单元的表示不唯一,即产生的分类的决策面不唯一.随着学习的进行, BP算法使权值可能收敛过于复杂的决策面,并至极致.
2.权值学习迭代次数足够多(Overtraining),拟合了训练数据中的噪声和训练样例中没有代表性的特征.
三.过度拟合解决方法
1.权值衰减.
在每次迭代过程中以某个小因子降低每个权值,这等效于修改E的定义,加入一个与网络权值的总量相应的惩罚项,此方法的动机是保持权值较小,避免weight decay,从而使学习过程向着复杂决策面的反方向偏
2.适当的stopping criterion
决策树的减枝,训练的早停止
3.验证数据
一个最成功的方法是在训练数据外再为算法提供一套验证数据,应该使用在验证集合上产生最小误差的迭代次数,不是总能明显地确定验证集合何时达到最小误差.Typically 30% of training patterns;Validation set error is checked each epoch;Stop training if validation error goes up
4.Cross-validation with some patterns
交叉验证方法在可获得额外的数据提供验证集合时工作得很好,但是小训练集合的过度拟合问题更为严重
k-fold交叉方法:
把训练样例分成k份,然后进行k次交叉验证过程,每次使用不同的一份作为验证集合,其余k-1份合并作为训练集合.每个样例会在一次实验中被用作验证样例,在k-1次实验中被用作训练样例;每次实验中,使用上面讨论的交叉验证过程来决定在验证集合上取得最佳性能的迭代次数n*,然后计算这些迭代次数的均值,作为最终需要的迭代次数。
5. 减少特征
人工选择,预留一些特征
利用算法选取一些比较好的特征
6. 正则化
这里有点疑问,正则化是为了防止过拟合还是为了解决过拟合。对部分无用的feature,定义其parameter(p3,p4)非常大,这样会导致训练结果w3,w4非常小,几乎为0,降低模型复杂度。这里也有个问题就是lamba很大会导致所有的wi都为0。矩阵分解中经常会用到。