干货 :教你用Python来计算偏差-方差权衡
衡量一个机器学习模型的性能,可以用偏差和方差作为依据。
一个高偏差的模型,总是会对数据分布做出强假设,比如线性回归。而一个高方差的模型,总是会过度依赖于它的训练集,例如未修剪的决策树。我们希望一个模型的偏差和方差都很低,但更多情况下我们需要在二者之间做出权衡。
在选择和调整模型时,“偏差-方差权衡”是一个非常有用的概念。当然它在一般情况下是无法直接计算的,因为这需要这一问题领域内的全部知识,而我们并不具备。尽管如此,我们可以评估出一个模型的误差,并将其拆分成偏差和方差两部分,从而借此了解该模型的运行方式。
在这篇教程中,你将了解如何计算一个机器学习模型的偏差和方差。
在完成这篇教程后,你将会学到:
? 模型误差包含模型方差、模型偏差以及不可约误差;
? 我们希望模型具有低偏差和低方差,但是一般情况下一个值的缩小会导
致另一个值的增大;
? 如何将均方误差分解成模型的偏差和方差。
我
的
新
书
《
用
Python
掌
握
机
器
学
习
》
(https://machinelearningmastery.com/machine-learning-with-python/)将
帮助你开始新的项目,其中包括分步教程和所有示例的Python源代码文件。
让我们开始吧。
教程综述
本篇教程可以分为三部分,分别是:
? 偏差、方差和不可约误差; ? 偏差-方差权衡; ? 计算偏差和方差。
偏差、方差和不可约误差
机器学习模型是用来做预测任务的,例如回归或分类。
一个模型预测性能可以用对未参与训练的样本做预测后的误差来表示,我们将其视作是模型误差。
? 误差(模型)
模型误差可以被分解为三个部分:模型的方差、模型的偏差以及不可约误差的方差。
? 误差(模型)= 方差(模型)+ 偏差(模型)+ 方差(不可约误差)
让我们仔细看看这三个术语。
模型偏差
偏差用于衡量一个模型拟合的输入和输出之间关系与真实情况的近似程度。
这能获得模型的刚度:模型对于输入和输出之间的函数的假设强度。
“这能够反映出模型的拟合结果与真实规律之间的差距。” ——《预测模型应用》2013年版,97页
当偏差符合未知的真实规律时,我们可以接受具有高偏差的预测模型。但是,当真实数据函数形式与模型的假设完全不匹配时,例如对一个高度非线性关系的数据使用线性关系的假设,具备过高偏差的模型是毫无用处的。
? 低偏差:关于对输入到输出映射函数形式的弱假设。 ? 高偏差:关于对输入到输出映射函数形式的强假设。
偏差一定是正值。
模型方差
模型的方差是模型在拟合不同的训练数据时性能的变化大小。它反映特定数据对模型的影响。
“方差指的是,用不同训练数据进行模型评估时,模型表现的变化程度。” ——《统计学习及其在R中的应用》2014年版,第34页
一个高方差的模型在训练数据集发生细小变化时预测结果会发生很大变化。相反,对于低方差的模型,训练数据发生或大或小的改变时,预测结果的变化都很小。
? 低方差:训练数据集的变化对于模型来说影响很小。 ? 高方差:训练数据集的变化对于模型来说影响很大。
方差一定是正值。
不可约误差
整体而言,模型的误差包含可约误差和不可约误差。
? 模型误差 = 可约误差 + 不可约误差
可约误差是我们可以去优化的成分。在模型通过学习训练集后这一数值会下降,我们会努力让这一数值尽可能地接近于零。
不可约误差是我们无法从模型中剔除的误差,在任何模型中都不可能被去除。
这一误差源于不可控因素,例如观测中的统计噪声。
“……通常会称之为“不可约噪声”,且不能在建模过程中剔除。” ——《预测模型应用》2013年版,第97页
同样的,尽管我们能够把可约误差压缩到接近于零或者非常小的值,甚至有时能够等于零,但不可约误差依然会存在。这决定了模型性能的下限。
“有一点是我们是需要牢牢记住的,那就是不可约误差始终会作为我们对目标Y预测精确率的下限值,这个边界在实践中永远是未知的。” ——《统计学习及其在R中的应用》2014年版,第19页
这提醒我们任何模型都不是完美的。
偏差-方差的权衡
对于模型的表现来说,偏差和方差是有关联的。
理想情况下,我们希望一个模型能有低偏差和低方差,但是在实际操作中这是非常具有挑战性的。实际上这是机器学习建模的目标。
降低偏差很容易使方差升高。相反,降低方差也会使得偏差升高。
“这被称之为一种‘权衡’,因为一般的方法很容易得到极低的偏差和很高的方差……或很低的方差和很高的偏差……”
——《统计学习及其在R中的应用》2014年版,第36页
这种关系一般被称为“偏差与方差的权衡”。这是一个关于思考如何选择模型和调整模型的概念框架。
我们可以基于偏差和方差来选择模型。简单的模型,例如线性回归和逻辑回归,通常具有高偏差和低方差。而复杂的模型,例如随机森林,通常具有低偏差和高方差。
我们通常会基于模型的偏差和方差所造成的影响来调整模型。对于K-近邻算法来说,超参数k控制着模型的偏差-方差权衡。k取值较小,例如k=1,会得到低偏差高方差的结果。反之k取值较大,如k=21,导致高偏差和低方差。
高偏差和高方差都不一定是坏的,但他们有可能会导致不良的结果。
我们时常要对一组不同的模型和模型参数进行测试,从而在给定的数据集中得到最好的结果。一个高偏差的模型有可能会是过于保守的,出现欠拟合。相反的,一个高方差的模型可能会出现过拟合。
我们有可能会选择提高偏差或方差,来减少模型的整体误差。