过拟合,预防过拟合。

博客摘自:算法

  http://blog.csdn.net/heyongluoyao8/article/details/49429629网络

  http://lbingkuai.iteye.com/blog/1666181数据结构

 

使用数据挖掘或者机器学习创建模型的目的:使用已经产生的(假设的独立同分布的)数据去训练,而后使用训练好的模型去拟合将来的数据分布。然而现实生活中的数据独立同分布的假设每每不成立。而且在数据量少的状况下,不足以对整个数据集的分布进行估计。所以,在实际应用中,一般会加入一些手段,防止训练模型过拟合,提升模型的泛化能力。机器学习

过拟合为了获得一致假设而使假设变得过分复杂称为过拟合。函数

     图像表示:学习

        

 

     缘由:一个过拟合的模型试图连偏差(噪音)都去解释(而实际上噪音又是不须要解释的),致使泛化能力比较差,显然就过犹不及了。优化

  

      另是一种解释:spa

      在对模型进行训练时,有可能遇到训练数据不够,即训练数据没法对整个数据的分布进行估计的时候,或者在对模型进行过分训练(overtraining)时,常     常会致使模型的过拟合(overfitting)。以下图所示:
        这里写图片描述
       经过上图能够看出,随着模型训练的进行,(polynomial: 多项式) 模型的复杂度会增长,此时模型在训练数据集上的训练偏差会逐渐减少,可是在模型的复杂度达到必定程度时,模型在验证集上的偏差反而随着模型的复杂度增长而增大。此时便发生了过拟合,即模型的复杂度升高,可是该模型在除训练集以外的数据集上却不work。
.net

 

手段blog

 

  •   Early stopping (适当的stopping criterion)

    对模型进行训练的过程便是对模型的参数进行学习更新的过程,这个参数学习的过程每每会用到一些迭代方法,如梯度降低(Gradient descent)学习算法。Early stopping即是一种迭代次数截断的方法来防止过拟合的方法,即在模型对训练数据集迭代收敛以前中止迭代来防止过拟合。
    Early stopping方法的具体作法是,在每个Epoch结束时(一个Epoch集为对全部的训练数据的一轮遍历)计算validation data的accuracy,当accuracy再也不提升时,就中止训练。这种作法很符合直观感觉,由于accurary都再也不提升了,在继续训练也是无益的,只会提升训练的时间。那么该作法的一个重点即是怎样才认为validation accurary再也不提升了呢?并非说validation accuracy一降下来便认为再也不提升了,由于可能通过这个Epoch后,accuracy下降了,可是随后的Epoch又让accuracy又上去了,因此不能根据一两次的连续下降就判断再也不提升。

    通常的作法是,在训练的过程当中,记录到目前为止最好的validation accuracy,当连续10次Epoch(或者更屡次)没达到最佳accuracy时,则能够认为accuracy再也不提升了。此时即可以中止迭代了(Early Stopping)。这种策略也称为“No-improvement-in-n”,n即Epoch的次数,能够根据实际状况取,如十、20、30……

 

  •      数据集扩增

 

    在数据挖掘领域流行着这样的一句话,“有时候每每拥有更多的数据赛过一个好的模型”。由于咱们在使用训练数据训练模型,经过这个模型对未来的数据进行拟合,而在这之间又一个假设即是,训练数据与未来的数据是独立同分布的。便是使用当前的训练数据来对未来的数据进行估计与模拟,而更多的数据每每估计与模拟地更准确。

    所以,更多的数据有时候更优秀。可是每每条件有限,如人力物力财力的不足,而不能收集到更多的数据,如在进行分类的任务中,须要对数据进行打标,而且不少状况下都是人工得进行打标,所以一旦须要打标的数据量过多,就会致使效率低下以及可能出错的状况。因此,每每在这时候,须要采起一些计算的方式与策略在已有的数据集上进行手脚,以获得更多的数据。

    通俗得讲,数据机扩增即须要获得更多的符合要求的数据,即和已有的数据是独立同分布的,或者近似独立同分布的。通常有如下方法:

 

    • 从数据源头采集更多数据
    • 复制原有数据并加上随机噪声
    • 重采样
    • 根据当前数据集估计数据分布参数,使用该分布产生更多数据等

 

  •     正则化方法

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

    具体的能够参考:

      http://blog.csdn.net/heyongluoyao8/article/details/49429629

  •   Dropout

    正则是经过在代价函数后面加上正则项来防止模型过拟合的。而在神经网络中,有一种方法是经过修改神经网络自己结构来实现的,其名为Dropout。该方法是在对网络进行训练时用一种技巧(trick),对于以下所示的三层人工神经网络:
                    这里写图片描述
    对于上图所示的网络,在训练开始时,随机得删除一些(能够设定为一半,也能够为1/3,1/4等)隐藏层神经元,即认为这些神经元不存在,同时保持输入层与输出层神经元的个数不变,这样便获得以下的ANN:
                    这里写图片描述     而后按照BP学习算法对ANN中的参数进行学习更新(虚线链接的单元不更新,由于认为这些神经元被临时删除了)。这样一次迭代更新便完成了。下一次迭代中,一样随机删除一些神经元,与上次不同,作随机选择。这样一直进行瑕疵,直至训练结束。

相关文章
相关标签/搜索