(转)机器学习:偏差处理
程序员文章站
2022-02-16 11:57:13
...
假设你的训练集、开发集和测试集都来自相同的分布,那你应该每次都试图去获取更多的训练数据,因为这样能单独提高性能,对吗?
有更多的数据是无害的,然而它并不总是如我们期望的那样有帮助。有时获取更多的数据可能在浪费时间。那么应该在何时决定添加数据呢?
机器学习中有两个主要的误差来源:偏差和方差。理解它们将有助于你决定是否要添加数据,以及利用好时间去执行其它的策略来提升性能。
假设你希望构建一个误差为 5% 的猫识别器。而目前的训练集错误率为 15%,开发集错误率为 16%。在这种情况下,添加数据可能不会有太多帮助。你应该关注其他改变。实际上,在你的训练集上添加更多的样本只会让你的算法难以在训练集上做的更好。(我们在后面章节中解释了原因)
如果你在训练集上的错误率是 15%(即 85% 的精度),但你的目标是 5% 错误率(95% 精度),那么第一个要解决的问题是提高算法在训练集上的性能。算法在开发/测试集上的性能通常比在训练集上要差。所以,如果算法在已知样本上达到 85% 的精度,那么是不可能在未知的样本上达到 95% 精度的。
如上所述,假设你的算法在开发集上有 16% 的错误率(84% 精度),我们将这 16% 的错误率分为两部分:
第一部分是算法在训练集上的错误率。在本例中,它是 15%。我们非正式地将它作为算法的偏差(bias)。
第二部分指的是算法在开发集(或测试集)上的表现比训练集上差多少。在本例中,开发集表现比训练集差 1%。我们非正式地将它作为算法的方差(variance)。
在统计学领域有着更多关于偏差和方差的正式定义,但不必担心。粗略地说,偏差指的是算法在大型训练集上的错误率;方差指的是算法在测试集上的表现低于训练集的程度。当你使用均方误差(MSE)作为误差度量指标时,你可以写下偏差和方差对应的两个公式,并且证明总误差=偏差+方差。但在处理机器学习问题时,此处给出的偏差和方差的非正式定义已经足够。
一些学习算法的改变能解决误差来源的第一个部分——偏差,并且提高算法在训练集上的性能;而一些改变能解决第二个部分——方差,并帮助算法从训练集到开发/测试集上更好地泛化。为了选择最有成效的改变,了解二者哪一方更需解决是很有用的。
还有一些方法能够对系统架构做出较大改变,同时减少偏差和方差。但是这些方法往往难以鉴定和实现。
一个“理想的”分类器(比如人类)在这个任务中可能取得近乎完美的表现。
假设你的算法表现如下:
训练错误率 = 1%
开发错误率 = 11%
存在什么问题呢?根据前一章的定义,我们估计偏差为 1%,方差为 10%(=11%-1%)。因此,它有一个很高的方差(high variance)。虽然分类器训练误差非常低,但是没能成功泛化到开发集上。这也被叫做过拟合(overfitting)。
现在,考虑如下情况:
训练错误率 = 15%
开发错误率 = 16%
我们估计偏差为 15%,方差为 1%。该分类器的错误率为 15%,没有很好地拟合训练集,但它在开发集上的误差不比在训练集误差高多少。因此,该分类器具有较高的偏差(high bias),但是较低的方差。我们称该算法是欠拟合(underfitting)的。
现在,考虑如下情况:
训练错误率 = 15%
开发错误率 = 30%
我们估计偏差为 15%,方差为 15%。该分类器有高偏差和高方差(high bias and high variance):它在训练集上表现得很差,因此有较高的偏差,而它在开发集上表现更差,因此具有较高的方差。由于分类器同时过拟合和欠拟合,所以过拟合/欠拟合术语很难应用与此。
最后,考虑如下情况:
训练错误率 = 0.5%
开发错误率 = 1%
该分类器做的很好,它具有低偏差和低方差。
在我们猫识别的例子中,“理想”错误率——即一个“最优”分类器可达到的值——接近 0%。人类几乎总是可以识别出图片中的猫。因此,我们希望机器能够做得同样好。
换作其他问题这将更难:假设你正在构建一个语音识别系统,并发现 14% 的音频片段有太多的背景噪声,或者太难以理解,导致即使是人类也无法识别出所说的内容。在这种情况下,即使是“最优”的语音识别系统也可能有约为 14% 的误差。
假设在这个语音识别问题上,你的算法达到:
训练错误率 = 15%
开发错误率 = 30%
算法在训练集上的表现已经接近最优错误率 14%,因此在偏差上或者说在训练集表现上没有太大的提升空间。然而,算法没有很好地泛化到开发集上,在方差造成的误差上还有很大的提升空间。
如果最优错误率接近 0%,那么 15% 的训练错误率则留下了很大的提升空间,这表明降低偏差可能有益。但如果最优错误率是 14%,那么 15% 的训练错误率表现告诉我们,在分类器的偏差方面几乎没有改进的余地。
对于最佳错误率远超过零的问题,有一个对算法误差更详细的分解。继续使用上面我们语音识别的例子,可以将总的 30% 的开发集误差分解如下(类似的分析可以应用于测试集误差):
最优错误率(“不可避免偏差”):14%。假设我们决定,即使是世界上最好的语音系统,仍会有 14% 的误差。我们可以将其认为是学习算法的偏差“不可避免”的部分。
可避免偏差:1%。即训练错误率和最优误差率之间的差值。
方差:15%。即开发错误和训练错误之间的差值。
如果可避免偏差值是负的,即你在训练集上的表现比最优错误率要好。这意味着你正在过拟合训练集,并且算法已经过度记忆(over-memorized)训练集。你应该专注于减少方差的方法,而不是进一步减少偏差的方法。
为了将这与我们之前的定义联系起来,偏差和可避免偏差关系如下:
偏差 = 最佳误差率(“不可避免偏差”)+ 可避免的偏差
使用这些定义是为了更好地传达关于如何改进学习算法的理解。这些定义与统计学家定义偏差和方差不同。从技术角度上说,这里定义的“偏差”应该叫做“我们认为是偏差的误差”;另外“可避免偏差”应该叫做“我们认为学习算法的偏差超过最优错误率的误差”。
这个“可避免偏差”反映了算法在训练集上的表现比“最优分类器”差多少。
方差的概念和之前保持一致。理论上来说,我们可以通过训练一个大规模训练集将方差减少到接近零。因此只要拥有足够大的数据集,所有的方差都是可以“避免的”,所以不存在所谓的“不可避免方差”。
再考虑一个例子,该例子中最优错误率是 14%,我们有:
训练误差 = 15%
开发误差 = 16%
我们称之为高偏差分类器,现在可避免偏差的误差是 1%,方差误差约为 1%。因此,算法已经做的很好了,几乎没有提升的空间。它只比最佳错误率差 2%。
从这些例子中我们可以看出,了解最优错误率有利于指导我们的后续步骤。在统计学上,最优错误率也被称为贝叶斯错误率(Bayes error rate),或贝叶斯率。
如何才能知道最优错误率是多少呢?对于人类擅长的任务,例如识别图片或转录音频剪辑,你可以让普通人提供标签,然后测量这些人为标签相对于训练集标签的精度,这将给出最优错误率的估计。如果你正在解决甚至人也很难解决的问题(例如预测推荐什么电影,或向用户展示什么广告),这将很难去估计最优错误率。
有更多的数据是无害的,然而它并不总是如我们期望的那样有帮助。有时获取更多的数据可能在浪费时间。那么应该在何时决定添加数据呢?
机器学习中有两个主要的误差来源:偏差和方差。理解它们将有助于你决定是否要添加数据,以及利用好时间去执行其它的策略来提升性能。
假设你希望构建一个误差为 5% 的猫识别器。而目前的训练集错误率为 15%,开发集错误率为 16%。在这种情况下,添加数据可能不会有太多帮助。你应该关注其他改变。实际上,在你的训练集上添加更多的样本只会让你的算法难以在训练集上做的更好。(我们在后面章节中解释了原因)
如果你在训练集上的错误率是 15%(即 85% 的精度),但你的目标是 5% 错误率(95% 精度),那么第一个要解决的问题是提高算法在训练集上的性能。算法在开发/测试集上的性能通常比在训练集上要差。所以,如果算法在已知样本上达到 85% 的精度,那么是不可能在未知的样本上达到 95% 精度的。
如上所述,假设你的算法在开发集上有 16% 的错误率(84% 精度),我们将这 16% 的错误率分为两部分:
第一部分是算法在训练集上的错误率。在本例中,它是 15%。我们非正式地将它作为算法的偏差(bias)。
第二部分指的是算法在开发集(或测试集)上的表现比训练集上差多少。在本例中,开发集表现比训练集差 1%。我们非正式地将它作为算法的方差(variance)。
在统计学领域有着更多关于偏差和方差的正式定义,但不必担心。粗略地说,偏差指的是算法在大型训练集上的错误率;方差指的是算法在测试集上的表现低于训练集的程度。当你使用均方误差(MSE)作为误差度量指标时,你可以写下偏差和方差对应的两个公式,并且证明总误差=偏差+方差。但在处理机器学习问题时,此处给出的偏差和方差的非正式定义已经足够。
一些学习算法的改变能解决误差来源的第一个部分——偏差,并且提高算法在训练集上的性能;而一些改变能解决第二个部分——方差,并帮助算法从训练集到开发/测试集上更好地泛化。为了选择最有成效的改变,了解二者哪一方更需解决是很有用的。
还有一些方法能够对系统架构做出较大改变,同时减少偏差和方差。但是这些方法往往难以鉴定和实现。
一个“理想的”分类器(比如人类)在这个任务中可能取得近乎完美的表现。
假设你的算法表现如下:
训练错误率 = 1%
开发错误率 = 11%
存在什么问题呢?根据前一章的定义,我们估计偏差为 1%,方差为 10%(=11%-1%)。因此,它有一个很高的方差(high variance)。虽然分类器训练误差非常低,但是没能成功泛化到开发集上。这也被叫做过拟合(overfitting)。
现在,考虑如下情况:
训练错误率 = 15%
开发错误率 = 16%
我们估计偏差为 15%,方差为 1%。该分类器的错误率为 15%,没有很好地拟合训练集,但它在开发集上的误差不比在训练集误差高多少。因此,该分类器具有较高的偏差(high bias),但是较低的方差。我们称该算法是欠拟合(underfitting)的。
现在,考虑如下情况:
训练错误率 = 15%
开发错误率 = 30%
我们估计偏差为 15%,方差为 15%。该分类器有高偏差和高方差(high bias and high variance):它在训练集上表现得很差,因此有较高的偏差,而它在开发集上表现更差,因此具有较高的方差。由于分类器同时过拟合和欠拟合,所以过拟合/欠拟合术语很难应用与此。
最后,考虑如下情况:
训练错误率 = 0.5%
开发错误率 = 1%
该分类器做的很好,它具有低偏差和低方差。
在我们猫识别的例子中,“理想”错误率——即一个“最优”分类器可达到的值——接近 0%。人类几乎总是可以识别出图片中的猫。因此,我们希望机器能够做得同样好。
换作其他问题这将更难:假设你正在构建一个语音识别系统,并发现 14% 的音频片段有太多的背景噪声,或者太难以理解,导致即使是人类也无法识别出所说的内容。在这种情况下,即使是“最优”的语音识别系统也可能有约为 14% 的误差。
假设在这个语音识别问题上,你的算法达到:
训练错误率 = 15%
开发错误率 = 30%
算法在训练集上的表现已经接近最优错误率 14%,因此在偏差上或者说在训练集表现上没有太大的提升空间。然而,算法没有很好地泛化到开发集上,在方差造成的误差上还有很大的提升空间。
如果最优错误率接近 0%,那么 15% 的训练错误率则留下了很大的提升空间,这表明降低偏差可能有益。但如果最优错误率是 14%,那么 15% 的训练错误率表现告诉我们,在分类器的偏差方面几乎没有改进的余地。
对于最佳错误率远超过零的问题,有一个对算法误差更详细的分解。继续使用上面我们语音识别的例子,可以将总的 30% 的开发集误差分解如下(类似的分析可以应用于测试集误差):
最优错误率(“不可避免偏差”):14%。假设我们决定,即使是世界上最好的语音系统,仍会有 14% 的误差。我们可以将其认为是学习算法的偏差“不可避免”的部分。
可避免偏差:1%。即训练错误率和最优误差率之间的差值。
方差:15%。即开发错误和训练错误之间的差值。
如果可避免偏差值是负的,即你在训练集上的表现比最优错误率要好。这意味着你正在过拟合训练集,并且算法已经过度记忆(over-memorized)训练集。你应该专注于减少方差的方法,而不是进一步减少偏差的方法。
为了将这与我们之前的定义联系起来,偏差和可避免偏差关系如下:
偏差 = 最佳误差率(“不可避免偏差”)+ 可避免的偏差
使用这些定义是为了更好地传达关于如何改进学习算法的理解。这些定义与统计学家定义偏差和方差不同。从技术角度上说,这里定义的“偏差”应该叫做“我们认为是偏差的误差”;另外“可避免偏差”应该叫做“我们认为学习算法的偏差超过最优错误率的误差”。
这个“可避免偏差”反映了算法在训练集上的表现比“最优分类器”差多少。
方差的概念和之前保持一致。理论上来说,我们可以通过训练一个大规模训练集将方差减少到接近零。因此只要拥有足够大的数据集,所有的方差都是可以“避免的”,所以不存在所谓的“不可避免方差”。
再考虑一个例子,该例子中最优错误率是 14%,我们有:
训练误差 = 15%
开发误差 = 16%
我们称之为高偏差分类器,现在可避免偏差的误差是 1%,方差误差约为 1%。因此,算法已经做的很好了,几乎没有提升的空间。它只比最佳错误率差 2%。
从这些例子中我们可以看出,了解最优错误率有利于指导我们的后续步骤。在统计学上,最优错误率也被称为贝叶斯错误率(Bayes error rate),或贝叶斯率。
如何才能知道最优错误率是多少呢?对于人类擅长的任务,例如识别图片或转录音频剪辑,你可以让普通人提供标签,然后测量这些人为标签相对于训练集标签的精度,这将给出最优错误率的估计。如果你正在解决甚至人也很难解决的问题(例如预测推荐什么电影,或向用户展示什么广告),这将很难去估计最优错误率。
上一篇: 非官方GitChat客户端及代码发布
下一篇: Eslint提示const关键字被保留