理解高偏差和高方差,欠拟合 过拟合

最早接触高偏差(high bias)和高方差(high variance)的概念,是在学习machine learning的欠拟合(under fitting)和过拟合(over-fitting)时遇到的。Andrew的讲解很清晰,我也很容易记住了过拟合-高方差,欠拟合-高偏差的结论。
最近一次和某AI大神的交谈中,他说我把高方差,高偏差的结论记反了,我还被“教育”了一番。我虽然非常肯定自己记住的结论,但是发现自己也没有真正理解到底什么是高偏差和高方差,没法有效的说服某AI大神。而我的脑子里,也有很多概念是混淆的,比如

  • 高方差,高偏差和数学中的方差,偏差是什么关系?
  • 高方差,高偏差的计算公式是什么?
  • 一个糟糕的模型(预测的基本都是错的),偏差和方差不是应该都很高么?到底哪个高?
    查阅了很多文档,发现很多文章都出自此文。这篇文章将的非常通俗易懂,也作为本文的主要参考文献。

前提

  • 模型与训练模型
    这个概念如果没有搞清楚,后面的一切都是空谈。我们每次使用一个训练集训练出一个“模型”,其实应该叫做训练模型。因为每次更换训练集,训练出的“模型”并不一样,即各个训练模型被训练出来的参数(系数)是不一样的。
    举个例子,我们在拟合一个y=ax+b的模型,第一个训练集训练的结果是y=x+0.9,第二个训练集训练的结果是y=x+1……因为我们不可能得到用于训练这个模型的所有数据,也就无法训练出使模型y=ax+b理论上100%正确的参数,所以我们只能得到不同的训练模型。
  • 参数(parameter)与超参数(hyperparameter)
    刚刚上面提到了参数,参数是被数据和算法训练出来的。而超参数(比如学习速率)不是被训练出来的,而是人为手工调整的。调整超参数更像是一种艺术,而不是科学。

问题来了

既然我们永远无法训练出那个理想的模型,只能训练出训练模型,那么训练模型预测的结果和理论模型(即现实)的结果肯定就存在误差。我们肯定希望这个误差越小越好,并且将这个训练模型应用在其他数据集上的误差也是越小越好。那么问题来了,如果这个误差很大,我们该如何是好?

  • 要收集更多的训练数据么?
  • 需要抽取更多的数据特征么?

举个栗子

假设我们要训练一个股票市场的模型,模型的目标是预测某支股票第2天的收益率,如果收益为正则买入,反之则卖出。我们的模型天天都想发财,它希望能准确预测每一天的涨跌,所以它关注的是第二天的收益,什么一年翻一倍之类的中长线策略它根本不关心。

  • A模型:阅读了大量的巴菲特,彼得林奇等等各种大师的书籍和数据,它发现买入低估值股票的收益很可观,于是每天满仓杀入估值最低的N支股票。没过几天,它亏成了狗。它去质问股神,股神曰:“你把投资想象的太简单了,除了看估值,我还看很多其他指标”。
  • B模型:吸取A模型的教训,它罗列了各种稀奇古怪的指标,最终惊喜的发现,模型成功的预测某支股票第二天的收益。万分惊喜下,它满仓杀入。第三天,第四天,第N天过去了,模型有时预测的准确,但大多时候谬之千里,还是亏成了?。

上面训练的2种模型,和我们期待的“神预测”模型有很大误差。我们要想减少预测误差,就要分析造成误差的原因。这里的误差包含:

  • 偏差(bias):我们要预测第二天的收益,而估值指标经常用于长线投资,模型从本质上就把目标搞错了。
  • 方差(variance):过多的已知条件,导致模型无法给出确定的预测,预测结果和瞎蒙一样,给人的感觉是不靠谱。
  • 无法消除的误差:我们都知道,完美预测第二天的情况,是不可能的。这样的误差难以消除,我们希望它越小越好,一般就忽略掉了。
    所以,我们可以优化的误差=偏差+方差

引用一个列子,打靶图

理解高偏差和高方差,欠拟合 过拟合_第1张图片
打靶图

在很多文章里看到过这张图,其原始出处就在参考文献中。这个例子很清晰,但是我第一次看的时候,有个问题并没有理解:

  • 图中的每一个蓝点代表什么?是对不同的输入x的预测输出y么?

概念

我第一次看到这张图时,把图上的蓝点理解成了每次射击时的结果,即一个训练模型对不同输入X作出的不同预测Y。如果是这么理解的话,就没法解释后面的高方差了。其实,每一个蓝点,都代表了一个训练模型的预测数据,即根据不同的训练集训练出一个训练模型,再用这个训练模型作出一次预测结果。如果将这个过程重复N次,相当于进行了N次射击。我们假设真实的函数关系是Y=f(x),而训练模型预测的结果是p(x),则

  • 偏差错误:偏差是衡量预测值和真实值的关系。即N次预测的平均值(也叫期望值),和实际真实值的差距。所以偏差bias=E(p(x)) - f(x)。
  • 方差错误:方差用于衡量预测值之间的关系,和真实值无关。即对于给定的某一个输入,N次预测结果之间的方差。variance= E((p(x) - E(p(x)))^2)。这个公式就是数学里的方差公式,反应的是统计量的离散程度。只不过,我们需要搞清楚我们计算的方差的意义,它反应的是不同训练模型针对同一个预测的离散程度。

打靶图解释

  • 高偏差,低方差:
    每次射击都很准确的击中同一个位置,故极端的情况方差为0。只不过,这个位置距离靶心相差了十万八千里。对于射击而言,每次都打到同一个点,很可能是因为它打的不是靶心。对于模型而言,往往是因为模型过于简单,才会造成“准”的假象。提高模型的复杂度,往往可以减少高偏差。
  • 高方差,低偏差:
    是不是偏差越低越好?是不是低偏差时,方差也会低呢?通过对偏差的定义,不难发现,偏差是一个期望值(平均值),如果一次射击偏左5环,另一次射击偏右5环,最终偏差是0。但是没一枪打中靶心,所以方差是巨大的,这种情况也是需要改进的。

后记:虽然在和AI大神的“争论”中,我落败了。但如果没有这次“争论”,我也就不会把这个问题彻底搞清楚。由衷感谢那些曾经批评我的和将要批评我的朋友~
参考文档:

  • http://scott.fortmann-roe.com/docs/BiasVariance.html
      

你可能感兴趣的:(理解高偏差和高方差,欠拟合 过拟合)