偏差和方差:误差的两大来源
假设你的训练集、开发集和测试集都来自相同的分布,那么每次你都应该试图去获取更多的训练数据,因为这样能单独提高性能,对吗?
拥有更多的数据是无害的,然而它并不总是如我们期望的那样有帮助。有时获取更多的数据可能是在浪费时间。那么,何时才应该添加数据呢?
机器学习中有两个主要的误差来源:偏差和方差。理解它们将协助你决定是否该添加数据,并依此合理安排时间去执行其它的策略来提升性能。
假设你希望构建一个误差为 5% 的猫识别器。而目前的训练集错误率为 15%,开发集错误率为 16%。在这种情况下,添加数据对结果可能不会有太多帮助。你应该关注其他改进策略。实际上,在你的训练集上添加过多样本只会让你的算法难以在训练集上做的更好。(我们在后面章节中解释了原因)
如果你在训练集上的错误率是 15%(即 85% 的精度),但你的目标是 5% 错误率(95% 精度),那么首先要解决的问题是提高算法在训练集上的性能。算法在开发/测试集上的性能通常比在训练集上要差。所以,如果算法在已知样本上达到了 85% 的精度,那么是不可能在未知样本上达到 95% 精度的。
如上所述,假设你的算法在开发集上有 16% 的错误率(84% 精度),我们将这 16% 的错误率分为两部分:
- 第一部分是算法在训练集上的错误率。在本例中,它是 15%。我们非正式地将它作为算法的偏差(bias)。
- 第二部分指的是算法在开发集(或测试集)上的表现比训练集上差多少。在本例中,开发集表现比训练集差 1%。我们非正式地将它作为算法的方差(variance)。
在统计学领域有着更多关于偏差和方差的正式定义,但不必担心。粗略地说,偏差指的是算法在大型训练集上的错误率;方差指的是算法在测试集上的表现低于训练集的程度。当你使用均方误差(MSE)作为误差度量指标时,你可以写下偏差和方差对应的两个公式,并且证明总误差=偏差+方差。但在处理机器学习问题时,此处给出的偏差和方差的非正式定义已经足够。
一些学习算法的优化能解决误差来源的第一个部分——偏差,并且提高算法在训练集上的性能;而另一些优化能解决第二个部分——方差,并帮助算法从训练集到开发/测试集上更好地泛化。为了选择最有成效的改变方向,了解二者哪一方更需解决是很有用的。
还有一些方法能够对系统架构做出较大改变,同时减少偏差和方差。但是这些方法往往难以鉴定和实现。
建立对偏差和方差的良好直觉将帮助你为算法选择出有效的改进策略。