当我们讨论预测模型时,预测误差可以分解为两个主要部分:由“偏倚”引起的误差,以及由“方差”引起的误差。模型最小化偏倚和方差的能力之间存在着权衡。理解这两种类型的错误可以帮助我们诊断模型结果,避免过拟合或欠拟合。
1 偏倚和方差
理解不同的误差源是如何导致偏倚和方差的,可以帮助我们改进数据的拟合过程,从而获得更精确的模型。我们从概念,图形以及数学公式三个方面来定义偏倚和方差。
1.1 概念定义
- 由偏倚引起的误差:模型的期望(平均)预测值与真实值之间的差异。当然,你只有一个模型,所以讨论期望/平均预测值可能有点奇怪。假设你可以重复多次建模过程:每一次收集新数据并进行新的分析,创建一个新模型。由于数据的随机性,生成的这些模型将会有一系列的预测值。偏倚衡量了这些模型的预测值与真实值之间的平均差异。
- 由方差引起的误差:模型在给定一个数据点上的预测波动性。再次假设你可以重复建模多次。方差是指:在给定数据点上不同模型预测值之间的差异程度。
1.2 图形定义
我们可以使用靶心图对偏倚和方差进行可视化。假设靶心表示模型完美地预测真实值。随着偏离靶心,我们的预测值将会越来越差。假设我们多次重复建模,得到多个预测值,对应着靶子上的每一次投掷。考虑到我们收集到的训练集的差异性,每一次投掷均代表模型的一次实现。有时,我们会得到一个很好的训练数据集,预测结果很好,离靶心很近。然而,有时我们的训练集可能包含很多离异点或者一些不标准的数值,导致预测效果很差。这些预测结果对应着靶子上的一系列投掷点。
我们可以绘制四种不同的例子来表示高/低偏差和方差的组合。
@图片
1.3 数学定义
记预测变量为Y,协变量为X,假设他们之间的关系为:
@图片
其中,误差项服从正态分布:
@图片
我们可以使用线性回归或者其他建模方法,来建立模型f^(X)预测函数f(X)。这这种情况下,在点x处的均方误差为:
@图片
这个误差可以分解为偏倚和方差项:
@图片
第三项为残差,是真实关系中的噪声项,任何模型都不能从根本上减少它。给定真实模型以及无限的数据去校准,我们应该能够把偏倚和方差降为0。然而,在一个不完美模型以及有限数据的世界中,我们只能在最小化偏倚和方差之间进行权衡。
2 例子:投票意向
让我们进行一个简单的模型构建任务。我们希望为下届选举中投票给共和党总统的人建立一个模型。随着模型的发展,这在概念上是微不足道的,通常比人们想象中的“建模”要简单的多,但它有助于我们清楚地说明偏倚和方差之间的区别。
一个简单的,或与有缺陷的(下面我们将会看到),建立这个模型的方法是随机选择50个电话号码,并打电话询问他们计划在下次选举中投票给谁。假设我们得到一些结果:
@图
从上面数据中,我们可以估算投票给共和党的概率为:13/(13+16)=44.8%。我们发布新闻说民主党将领超10个百分比的票数赢得选取。但是,当选举来临时,他们实际上落后10个百分比票数落选。那肯定反映出我们预测的结果不好。我们的模型出了什么问题?
显然,我们构建的模型有很多问题:我们仅仅从电话簿中进行抽样,所以受访群众仅仅是出现在电话名单中的人;我们没有跟进无应答群众,他们可能有不同的投票模式或偏向。而且,样本量太小,不能很好代表整体。
把这些误差原因都放在一个大盒子里是很迷惑的。实际上,他们可以按照导致偏倚的原因和导致方差的原因进行划分。
例如,使用电话簿进行抽样是产生”偏倚“的原因之一。仅仅调查特定类别的人群,将会导致我们重复建模所得到的结果将是一致的。类似的,没有跟进无应答群众是偏倚的另一来源之一,它很有可能会改变与应答群众混合的结果。在靶心图中,这些将会使我们偏离靶心,但不会改变估计数的分散程度。
另一方面,样本量较小是方差的来源之一。如果我们增加我们的样本量,每次重复调查和与测试,结果就会更加一致。由于偏倚的影响,我们得到的结果可能仍然非常不准确,但是预测的方差将会减少。小样本量将会导致估计值在靶心图上的分布比较分散。增大样本量可以使得估计值分布更加集中,但是它们仍可能比较偏离靶心。
一般情况下,用于构建模型的数据集是在模型构建之前提供的,建模人员不能简单地说:“让我们增加样本量以减少方差。”在实践中,偏倚和方差之间存在着权衡,其中一个减少将会导致另一个增加。最小化模型的误差需要仔细权衡偏倚和方差。
3. 应用实例:选民登记
让我们看一个更实际的例子。假设我们有一个训练数据集,包含选民的三个信息:选民的政党登记,选民的财富,以及选民的宗教信仰信息。如下图:X轴表示财富信息,Y轴表示宗教信息,红色圈圈代表共和党选民,蓝色圈圈代表民主党选民。我们要利用财富和宗教信息来预测选民登记。
@图
3.1 k-近邻算法
有很多方法来完成这个建模任务。对于这种二分类数据,我们经常使用逻辑回归。然而,如果我们认为变量之间存在非线性关系、那么使用更灵活的数据自适应方法可能会更加理想。其中,k-近邻算法就是一个非常灵活的机器学习算法。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。