如何防止过拟合?与如何特征选择?

之前学习的时候记得比较杂乱,现在特来整理一下,初期先把方法的大纲罗列出来,具体的内容后期持续补充更新。


什么是过拟合?

       是这样一种现象:一个假设在训练数据上能够获得比其他假设更好的拟合,但是在除训练数据集之外的数据上却不能很好的拟合数据,这时就出现了过拟合。就好像比如我们在想要拟合一个数据,本来我们可以用一条直线拟合数据,但是我们非要用个很复杂的多项式来拟合数据(如下图中的红线),虽然得到的效果不错,但是如果对于未知的数据,那个很复杂的多项式不能很好的预测其结果,其泛化能力很差。(引用的一段话:

http://blog.sina.com.cn/s/blog_6622f5c30101bt7n.html

过度拟合(overfitting)是指数据模型在训练集里表现非常满意,但是一旦应用到真实业务实践时,效果大打折扣;换成学术化语言描述,就是模型对样本数据拟合非常好,但是对于样本数据外的应用数据,拟合效果非常差。在我们数据分析挖掘业务实践中,就是“模型搭建时表现看上去非常好,但是应用到具体业务实践时,模型效果显著下降,包括准确率、精度、效果等等显著下降”。)



0.为什么会过拟合?

1)建模样本抽取错误:包括但不仅限于样本数量太少,抽样方法错误,抽样时没有足够考虑业务场景或业务特点

2)样本里的噪声数据干扰过大,大到模型过分记住了噪声的特征

3)由训练集得到的模型太复杂,会过拟合,其在测试集上的泛化能力会很次


1.如何防止过拟合?

     1)early stopping

     对模型进行训练的过程即是对模型的参数进行学习更新的过程,这个参数学习的过程往往会用到一些迭代的方法,如梯度下降学习算法。early stopping便是一种迭代次数截断的方法来防止过拟合的方法,即在模型对训练数据集迭代收敛之前停止迭代来防止过拟合。

    具体做法是,在每一步结束时都会计算一个Accuracy,当Accuracy不再提高时,就停止训练。这种做法很符合直观感受,因为accuracy都再提高了,再继续训练也是无益的,只会提高训练的时间。那么该做法的一个重点便是怎样才认为validation accurary不再提高了呢?并不是说validation accuracy一降下来便认为不再提高了,因为可能经过
这个Epoch后,accuracy降低了,但是随后的Epoch又让accuracy又上去了,所以不能根据一两次的连续降低
就判断不再提高。一般的做法是,在训练的过程中,记录到目前为止最好的validation accuracy,当连续10次
Epoch(或者更多次)没达到最佳accuracy时,则可以认为accuracy不再提高了
。此时便可以停止迭代了。

     2) 数据集扩增

            可以解决0中1)的问题

           数据集扩增需要得到更多的符合要求的数据,即和已有的数据是独立同分布的,或者近似独立同分布的。

          从源头采集更多的数据

         复制原有数据并加上随机噪声

         重采样

         根据当前数据集估计数据分布参数,使用该分布产生更多的数据等


     3) 正则化(L1,L2)

           正则化方法是指在进行目标函数或代价函数优化时,在目标函数或代价函数后面加上一项正则项,一般有L1正则和L2正则等。

           这里以线性回归为基础,了解正则化如何防止过拟合的。

           L1的定义:

          原来的线性回归模型优化目标是最小化损失函数,即:

                         

         现在我们给它加上一个L1范数的正则项,有

           

        L2范数的正则项,有

          




     

     4)dropout

     5)验证数据:K-折交叉验证

     6)减少特征

     7)权值衰减。主要用于神经网络模型中

      它在每次迭代过程中以某个小因子降低每个权值,这等效于修改E的定义,加入一个与网络权值的总量相应的
惩罚项,此方法的动机是保持权值较小,避免weight decay,从而使学习过程向着复杂决策面的反方向偏。

2.为什么要特征选择?

    有两个很重要的原因:首先,我们在显示任务中经常会遇到维数灾难问题,这是由于属性过多而造成的,若能从中选择出重要的特征,使得后序学习过程仅需在一部分特征上构建模型,则维数灾难就会大为减轻。从这个意义上来说,特征选择和降维有相似的动机。事实上,它们是处理高维数据的两大主流技术。第二个原因是,去除不相关特征往往会降低学习任务的难度,这就像侦探破案一样,若将纷繁复杂的因素抽丝剥茧,只留下关键因素,则真相往往看的更清楚。[摘自周志华-机器学习-11章]

3.如何特征选择?

     1)计算每一个特征与向量变量的相关性(有label)

     皮尔森系数

    互信息系数

   

     2)L1正则项

     L1正则项具有稀疏解的特性,但是要注意的是L1没有选到的特征并不代表不重要,原因是两个具有高相关性的特征可能只保留一个。如果要确定哪个特征重要,再通过L2交叉验证

    3)训练能够对特征打分的预选模型,如Rondom Forest,Logistic Regression;打分获得相关性后再训练最终模型

    4) 通过特征组合后再来选择特征

    5)深度学习(自动选择特征)

    6)(PCA/SVD,LDA等特征降维)

阅读更多

没有更多推荐了,返回首页