经验误差与泛化误差、偏差与方差、欠拟合与过拟合、交叉验证

 版权声明:本文为博主原创文章,未经博主允许不得转载。专注高质量的博客,博客地址:http://blog.csdn.net/zhihua_oba https://blog.csdn.net/zhihua_oba/article/details/78684257
经验误差与泛化误差、偏差与方差、欠拟合与过拟合、交叉验证
主要内容 
经验误差与泛化误差
偏差与方差
欠拟合与过拟合
交叉验证
一、经验误差(训练误差)与泛化误差 
  经验误差(训练误差):模型在训练集上的误差称为“经验误差”(empirical error)或者“训练误差”“training error”。 
  泛化误差:模型在新样本集(测试集)上的误差称为“泛化误差”(generalization error)。

二、偏差与方差 
  泛化误差可分解为偏差、方差与噪声之和,即[Math Processing Error]generalization error=bias2+variance+noise。 
  “噪声”:描述了在当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度。 
  假定期望噪声为零,则泛化误差可分解为偏差、方差之和,即[Math Processing Error]generalization error=bias2+variance。 
  “偏差”:描述了模型的期望预测(模型的预测结果的期望)与真实结果的偏离程度。偏离程度越大,说明模型的拟合能力越差,此时造成欠拟合。 
  “方差”:描述了数据的扰动造成的模型性能的变化,即模型在不同数据集上的稳定程度。方差越大,说明模型的稳定程度越差。如果模型在训练集上拟合效果比较优秀,但是在测试集上拟合效果比较差劣,则方差较大,说明模型的稳定程度较差,出现这种现象可能是由于模型对训练集过拟合造成的。 
  简单的总结一下:偏差大,说明模型欠拟合;方差大,说明模型过拟合。如何平衡模型的偏差和方差,一直是我们追求的效果。感兴趣的童鞋,可以阅读《Understanding the Bias-Variance Tradeoff》。 
  下图可以帮助读者,更加直观的理解“偏差”与“方差”。 
 经验误差与泛化误差、偏差与方差、欠拟合与过拟合、交叉验证_第1张图片
图1
三、欠拟合与过拟合 
  如何通过学习曲线来识别模型是否发生了欠拟合/过拟合呢?如果发生了欠拟合/过拟合,我们又该如何处理呢? 
  1、横轴为训练样本数量,纵轴为误差: 
  首先,我们来看如何通过学习曲线识别是否发生了欠拟合/过拟合,如下图2。模型欠拟合时,在训练集以及测试集上同时具有较高的误差,此时模型的偏差较大;模型过拟合时,在训练集上具有较低的误差,在测试集上具有较高的误差,此时模型的方差较大。模型正常时,在训练集以及测试集上,同时具有相对较低的偏差以及方差。 

经验误差与泛化误差、偏差与方差、欠拟合与过拟合、交叉验证_第2张图片图2

  然后,我们想办法解决欠拟合/过拟合。根据上图2,我们发现:当模型欠拟合的时候,我们发现增大训练集,偏差无法降低,无法解决欠拟合问题;当模型过拟合的时候,我们发现增大训练集,方差减小,可以解决过拟合问题。 
  2、横轴为模型复杂程度,纵轴为误差: 
  横轴表示模型的复杂程度,增加模型的复杂程度的方法,比如增加特征项、添加多项式等等。 
  首先,我们来看如何通过学习曲线识别是否发生了欠拟合/过拟合,如下图3。模型在点A处,在训练集以及测试集上同时具有较高的误差,此时模型的偏差较大,模型欠拟合;模型在点C处,在训练集上具有较低的误差,在测试集上具有较高的误差,此时模型的方差较大,模型过拟合。模型复杂程度控制在点B处为最优。 
 经验误差与泛化误差、偏差与方差、欠拟合与过拟合、交叉验证_第3张图片
图3

  然后,我们想办法解决欠拟合/过拟合。根据上图3,我们发现:当模型欠拟合时,可以增加模型的复杂程度;当模型过拟合时,可以减小模型的复杂程度。 
  3、横轴为正则项系数,纵轴为误差: 
  一般情况下,为了限制模型造成过拟合,可以添加正则项(惩罚项)。 
  首先,我们来看如何通过学习曲线识别是否发生了欠拟合/过拟合,如下图4。模型在点A处,在训练集上具有较低的误差,在测试集上具有较高的误差,此时模型的方差较大,模型过拟合;模型在点C处,在训练集以及测试集上同时具有较高的误差,此时模型的偏差较大,模型欠拟合。模型正则项系数控制在点B处为最优。 
 经验误差与泛化误差、偏差与方差、欠拟合与过拟合、交叉验证_第4张图片
图4

  然后,我们想办法解决欠拟合/过拟合。根据上图4,我们发现:当模型过拟合时,可以增大模型正则项系数;模型欠拟合时,可以减小模型正则项系数。
  上文中,我们介绍了,如何通过学习曲线识别欠拟合/过拟合,以及对应的解决方法。接下来,我们针对欠拟合/过拟合,给出其他对应的解决方法。 
  如何解决欠拟合: 
  1)添加其他特征项,有时候我们模型出现欠拟合,是因为特征项不够导致的,可以添加其他特征项来解决。例如,“组合”、“泛化”、“相关性”三类特征是特征添加的重要手段,无论在什么场景,都可以照葫芦画瓢,总会得到意想不到的效果。除上面的特征之外,“上下文特征”、“平台特征”等等,都可以作为特征添加的首选项。 
  2)添加多项式特征,这个在机器学习算法里面用的很普遍,例如将线性模型通过添加二次项或者三次项使模型泛化能力更强。例如,FM模型、FFM模型,其实就是线性模型,增加了二阶多项式,保证了模型一定的拟合程度。 
  3)减小正则化系数,前文中已经分析。 
  等等,还有很多方法,可以对应下边的过拟合解决方法来进行欠拟合解决方法的选择。 
  如何解决过拟合: 
  1)重新清洗数据,导致过拟合的一个原因也有可能是数据不纯导致的,如果出现了过拟合就需要我们重新清洗数据。 
  2)增加训练样本数量,前文中已经分析。 
  3)降低模型复杂程度,前文中已经分析。 
  4)增大正则项系数,前文中已经分析。 
  5)采用dropout方法,这个方法在神经网络里面很常用。dropout方法,通俗一点讲就是在训练的时候让神经元以一定的概率不工作。 
  6)early stoping。 
  7)减少迭代次数。 
  8)增大学习率。 
  9)添加噪声数据。 
  10)树结构中,可以对树进行剪枝。 
  等等,方法很多,需要根据实际问题,实际模型,进行选择。

四、交叉验证 
  交叉验证,主要目的是针对模型的“泛化误差”(generalization error)进行评估,得到模型的“泛化误差”的近似值。当有多个模型可以选择时,我们通常选择“泛化误差”最小的模型。 
  这里主要介绍“K折交叉验证”: 
  1、将数据集(其实是训练集,我们暂且称为数据集吧,假设含有N个样本)分成K份(每份含有N/K个样本),选择其中1份作为测试集,另外K-1份作为训练集。这样的话,测试集就有K种情况。 
  2、在每种情况中,用训练集训练模型,用测试集测试模型,计算模型的泛化误差(暂且这么叫吧)。 
  3、将K种情况下,模型的泛化误差取均值,得到模型最终的泛化误差。

注:一般2<=K<=10。 
  训练集中样本数量要足够多,一般至少大于总样本数的50%。 
  训练集和测试集必须从完整的数据集中均匀取样。均匀取样的目的是希望减少训练集、测试集与原数据集之间的偏差。当样本数量足够多时,通过随机取样,便可以实现均匀取样的效果。
--------------------- 
作者:zhihua_oba 
来源:CSDN 
原文:https://blog.csdn.net/zhihua_oba/article/details/78684257 
版权声明:本文为博主原创文章,转载请附上博文链接!

你可能感兴趣的:(经验误差与泛化误差、偏差与方差、欠拟合与过拟合、交叉验证)