首先声明一下,这里所说的方差、偏差与统计学上的不是一个概念。这里引入偏差和方差的概念还是为了进行误差分析。之前我们介绍过一些误差分析的方法,主要是对误检的开发集中的图片进行属性分析,找到算法的薄弱点,这里介绍另外一种思路。
现在我们对于所有的数据,可以分为三类:训练集、开发集和测试集。我们之前只介绍了在开发集和测试集上对算法进行测试,其实还有一种测试就是在训练集集上对模型进行测试。有些同学这时候可能就纳闷了,在训练集上进行测试有什么意义?这些素材明明已经训练过了,为什么还能拿来测试?
这就来回答一下大家的疑问。前面咱们介绍过,开发集和测试集一般是要服从同分布的,而且要和实际场景的分布尽可能一致,但是他们和训练集的分布不一定是一致的。其实对于
一个算法模型来说,有两方面要求:
在和训练集相同分布的素材上效果要好 (可以简单理解为训练集)
在开发集/测试集上效果要好
上面两点是具有递进关系的,首先要在训练集上分类效果好,才有可能在测试集上取得好的效果。
这里简单解释一下” 和训练集相同分布的素材”怎么理解。
通常情况下算法同学会这样做:将训练集平均分为 N 等份,比如说 10 等份。然后重复如下步骤:
 选择第 1 份作为测试集,剩余 9 份作为训练集;
 选择第 2 份作为测试集,剩余 9 分组为训练集;
 。。。
 选择第 10 份作为测试集,剩余 9 份作为训练集。
以上共训练了 10 次,测试了 10 次,检测率取平均值。上面这个过程就叫做交叉验证 (Cross-validation)。当然了,分成 5 份可以。这里我们可以将每一份的测试集都认为是和训练集服从同一分布的。

上面说了这么多,接下来才是今天的重点:假如说我们设计一个分类器,其在训练集上的误检率为 10%,在测试集上的误检率是 15%,对于测试集上的 15% 的误检率,可以将其分为两个部分:
 第一部分是算法在训练集上的误检率,称其为偏差,本例中是 10%,
 第二部分是模型在测试集 (或者开发集) 上的表现比训练集上差多少,称其为方差,在本例中测试集上的表现比训练集差 5%,
我们最终的目的是模型在测试集上能够得到好的表现,这时候就可以分析模型的瓶颈到底是在偏差还是方差,因为有些策略主要是为了改进偏差,有些策略是为了改进方差,建立起算法在偏差和方差上的表现,一方面有助于算法同学选择有效的改进策略,另一方面,测试同学也可以根据算法在偏差和方差上的表现,提出针对性的改进建议,同时也能树立自己的专业性。

知道了方差和偏差,怎么用它来对模型进行分析呢?接下来通过一个例子示范一下该怎么做。
假如说我们现在训练了一个分类器,考虑如下四种情况:
训练集误检率 1%
测试集误检率 10%
根据上面的定义,该分类器偏差为 1%,方差为 9%。说明这个模型在训练集上表现很好,但是在测试集上表现比较差,说明模型的泛化能力比较差,即模型在训练集上过拟合

第二种情况:
训练集误检率 10%
测试集误检率 11%
这种情况下,偏差为 10%,方差为 1%,偏差高,方差低,说明模型对训练集的拟合并不好,属于欠拟合

第三种情况:
训练集误检率 10%
测试集误检率 20%
该模型同时具有高偏差和高方差,它在训练集上表现很差,同时泛化能力 (即测试集上的表现) 也很差,它同时即过拟合又欠拟合

第四种情况:
训练集误检率 1%
测试集误检率 2%
该模型同时具有低偏差和低方差,这个模型就很好,既很好的拟合了训练集,同时又具有良好的泛化能力。
上面就是从偏差和方差的角度对模型进行分析,有了这个分析,接下来不管是模型改进还是对模型测试,都会有一个方向性的指导。


↙↙↙阅读原文可查看相关链接,并与作者交流