zoukankan      html  css  js  c++  java
  • 机器学习实记(三)模型误差的来源

    一.写在前面

      本节所讲的内容主要是讨论如何进一步提高通过机器学习获得fbest的准确度使其更进一步接近ftrue,为了解决这个问题我们必须先明确我们学习得到的fbest的误差来自于哪里。这里先提一下误差的主要两个来源分别是bias和variance,即偏差和方差,换句话说当你想进一步提高你模型的精确度的时候你可以分析你所设计模型的误差是主要来自bias还是variance,然后有针对的去改进来进一步的提高模型的精度。

    二.bias和variance

      那么究竟什么是bias什么是variance?这里你可以想象一下你手持一把desert eagle来打靶,那么你能否命中靶心主要取决两点,第一你是否有瞄准靶心,第二你开枪之后的子弹是否受到风速、枪械、温度等因素的影响而导致无法做到瞄哪子弹就打到哪。上面的这个例子,靶心就是我们最终想要模拟得到的ftrue,而你每往靶子上开的一枪就是你通过机器学习获得的fbest,bias就是你持枪所瞄准的点和靶心的差距,variance就是你所开出的枪受到风速等因素的影响而产生的偏差。现在我们来看一张图2-1。

                               图2-1 bias和variance

      图中的蓝色点就是你通过机器学习得到的fbest,多次对不同的数据进行学习就可以得到多个这样的蓝色点,对这些蓝色点取平均值就是你次打靶所瞄准的点,该点与靶心的距离就是bias,而某一射击的蓝色点与本次射击所瞄准点间的距离就是variance。可以看到当bias和variance都很小时即图片的左上角的效果,蓝色的点均分布在靶心附近学习的效果很好。

      了解了什么时bias和variance之后我们就应该考虑一下各种模型的bias和variance是怎么样的,这里先讲结论,越为复杂的模型一般它的variance也会大一些,对应的越为简单的模型其bias也会更大一些。这里还是举上一节中的神奇宝贝的例子,我们在一次的模型下进行了100次的学习分别得到100个fbest同样的在五次的模型下也进行了100次学习分别得到100个fbest,对这些函数进行绘图得到图2-2

                               图2-2 各模型的variance

    可以看出五次项的函数分布更为分散而一次项函数分布的相对更为集中,这种分散和集中就是variance大小的体现,为了进一步理解越为复杂的函数variance越大这个概念,可以做一个极端假设,设想一个最为简单的常数函数f=c,则这个函数的分布是不会分散的它的variance=0。看过variance的例子我们再来看一下bias的例子,例子如图2-3

                                     图2-3 各模型的bias

    图中红色的线是代表做的一次学习得到的fbest,蓝色的线是所有fbest的平均favg,黑色的线是ftrue,可以按看出五次的favg与ftrue更为接近,这里的接近程度就是对bias大小的描述。至于为什么复杂的函数的bias会更小,这里给出一种解释,我们知道更为复杂的model它所对应的函数池能表征的范围更大,也就更有可能能够包含到ftrue,所以函数池里的函数平均之后也就离ftrue更为接近,相对的简单的model它所对应的函数池中可能根本没有包含到ftrue,所以它再怎么平均距离ftrue都是远的。

    三.过拟合和欠拟合

      以上讲述了误差来源bias和variance,现在从这两个的角度来理解一下过拟合和欠拟合这两种现象。简单来说当误差主要是来自于variance时会导致过拟合而当误差主要来自于bias时则会导致欠拟合,之前讲过过拟合的基本概念,这里再解释一下啊所谓的欠拟合underfitting,直观来说就是模型的表达能力不足而导致模型在训练集上的表现较差。现在来看一张图3-1

                            图3-1overfitting和underfitting

    从图中可以看出当误差主要来自于variance时,达到一定程度后就会导致过拟合的现象,而当误差主要来自bias时,达到一定程度时就会导致欠拟合的现象,所以在选择模型时需要综合考虑二者选择合适的模型。

    四、解决方案

    4.1 解决误差主要来自于bias

      前面已经讲过产生这种误差的主要原因时因为模型太过简单,所以相应的要解决就必须重新设计你的模型,这主要有两种措施,第一种考虑更多的特征,即将更多的变量的引入你的模型中考虑更多可能影响到你模型的因素,第二种设计更复杂的模型,比方说原先使用的是一次的模型,现在考虑使用二次、三次或者更高次的模型来表达

    4.2 解决误差主要来自于variance

      前面已经讲过产生这种误差的主要原因是模型表达的能力过强与所给出的数据量不符合,导致模型记住了所有的数据而不是学习到的,所以相应的措施从数据量的角度有两种,第一种给出更多的测试数据,让模型进行学习,这种方式十分有效,但其实这种方法在实际运用中并不一定能够做到,因为往往数据不是那么好获得的。第二种就是正则化regularization,这种方式在上一遍文章种有提到过,就是在损失函数后面添加了一个新的项,为什么这种方式可以降低variance的误差,直观的来说使用正则化让曲线变的更加平滑,也就是更具集中,不会因数据中的部分杂质而产生剧烈波动。具体效果如图4-1

                             图4-1 正则化

    观察下方的三张图,第一张是没有使用正则化的效果图,第二、三张是使用了正则化的程度不同的效果图,可以看出很明显的曲线变得更为集中,有利于减小来自variance的误差,但要注意适度,一旦正则化过度将会大幅度提高bias的误差,如何理解呢,简单的说就是你弱化了模型的表达,可能导致模型对应的函数池的范围大幅度下降从而没有包含到ftrue,所以需要在这二者之中找到平衡。

    五、写在最后

      本节的关键在于理解误差的来源,理解bias和variance的概念和对应的减小措施,去寻找bias和variance之间的平衡,这里补充一下视频中还提到了N-fold的交叉验证,有兴趣的同学可以自己去了解一下,我这里简单提一下,其实这个问题我在这个系列的第二节的写在最后提到过,就是为了解决模型在测试集上得到的准确率比在实际应用中模型准确率来的低的原因,主要就是因为训练集中的数据发生了泄露,而N-fold的交叉验证的方式可以解决这个问题,它将训练集中的数据进行划分,分为训练和验证,经过训练和验证集后的模型,再到测试集上进行测试其得到的结果就能较好的反应在实际应用中的效果。

  • 相关阅读:
    影响STA的因素-OCV
    FPGA的可靠性分析
    DFT
    Verilog 延时模型
    收缩数据库日志
    iis设置局域网访问,Context.Request.Url.Authority老是取出为localhost问题
    vs2012 后期生成事件命令报错 9009
    MIME配置
    sql 字符串拼接 =>for xml()
    js 切换embed的src值
  • 原文地址:https://www.cnblogs.com/wxrqforever/p/11106866.html
Copyright © 2011-2022 走看看