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

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

  • 主要内容
    • 经验误差与泛化误差
    • 偏差与方差
    • 欠拟合与过拟合
    • 交叉验证

一、经验误差(训练误差)与泛化误差
  经验误差(训练误差):模型在训练集上的误差称为“经验误差”(empirical error)或者“训练误差”“training error”。
  泛化误差:模型在新样本集(测试集)上的误差称为“泛化误差”(generalization error)。

二、偏差与方差
  泛化误差可分解为偏差、方差与噪声之和,即 generalization error=bias2+variance+noise
  “噪声”:描述了在当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度。
  假定期望噪声为零,则泛化误差可分解为偏差、方差之和,即 generalization error=bias2+variance
  “偏差”:描述了模型的期望预测(模型的预测结果的期望)与真实结果的偏离程度。偏离程度越大,说明模型的拟合能力越差,此时造成欠拟合。
  “方差”:描述了数据的扰动造成的模型性能的变化,即模型在不同数据集上的稳定程度。方差越大,说明模型的稳定程度越差。如果模型在训练集上拟合效果比较优秀,但是在测试集上拟合效果比较差劣,则方差较大,说明模型的稳定程度较差,出现这种现象可能是由于模型对训练集过拟合造成的。
  简单的总结一下:偏差大,说明模型欠拟合;方差大,说明模型过拟合。如何平衡模型的偏差和方差,一直是我们追求的效果。感兴趣的童鞋,可以阅读《Understanding the Bias-Variance Tradeoff》
  下图可以帮助读者,更加直观的理解“偏差”与“方差”。

图1
图1

三、欠拟合与过拟合
  如何通过学习曲线来识别模型是否发生了欠拟合/过拟合呢?如果发生了欠拟合/过拟合,我们又该如何处理呢?
  1、横轴为训练样本数量,纵轴为误差:
  首先,我们来看如何通过学习曲线识别是否发生了欠拟合/过拟合,如下图2。模型欠拟合时,在训练集以及测试集上同时具有较高的误差,此时模型的偏差较大;模型过拟合时,在训练集上具有较低的误差,在测试集上具有较高的误差,此时模型的方差较大。模型正常时,在训练集以及测试集上,同时具有相对较低的偏差以及方差。

这里写图片描述
图2

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

  然后,我们想办法解决欠拟合/过拟合。根据上图3,我们发现:当模型欠拟合时,可以增加模型的复杂程度;当模型过拟合时,可以减小模型的复杂程度。
   3、横轴为正则项系数,纵轴为误差:
  一般情况下,为了限制模型造成过拟合,可以添加正则项(惩罚项)。
  首先,我们来看如何通过学习曲线识别是否发生了欠拟合/过拟合,如下图4。模型在点A处,在训练集上具有较低的误差,在测试集上具有较高的误差,此时模型的方差较大,模型过拟合;模型在点C处,在训练集以及测试集上同时具有较高的误差,此时模型的偏差较大,模型欠拟合。模型正则项系数控制在点B处为最优。
这里写图片描述
图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%。
  训练集和测试集必须从完整的数据集中均匀取样。均匀取样的目的是希望减少训练集、测试集与原数据集之间的偏差。当样本数量足够多时,通过随机取样,便可以实现均匀取样的效果。

  • 27
    点赞
  • 110
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值