Jason Brownlee作者车前子校对吴振东翻译

教你用Python来计算偏差-方差权衡

本文为你讲解模型偏差、方差和偏差-方差权衡的定义及联系,并教你用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,导致高偏差和低方差。

高偏差和高方差都不一定是坏的,但他们有可能会导致不良的结果。

我们时常要对一组不同的模型和模型参数进行测试,从而在给定的数据集中得到最好的结果。一个高偏差的模型有可能会是过于保守的,出现欠拟合。相反的,一个高方差的模型可能会出现过拟合

我们有可能会选择提高偏差或方差,来减少模型的整体误差。

计算偏差和方差

我经常会遇到这样的问题:

“如何能量化我的算法在数据集上所得到的偏差-方差权衡呢?”

从技术的角度讲,我们无法进行这样的计算。

我们无法针对一个预测建模问题来计算实际的偏差和方差。因为我们并不知道真实的映射函数。

但是我们可以将偏差、方差、不可约误差和偏差-方差权衡作为帮助我们选择模型、调整模型和解释结果的工具。

“在实际情况中,f是无法被观察到的,所以一般对于统计学习方法来说无法明确计算MSE值、偏差、方差。虽然如此,我们必须要关注偏差-方差权衡。”

——《统计学习及其在R中的应用》2014版,第36页

虽然偏差-方差权衡是一个概念上的工具,某些情况下我们也可以进行估计。

Sebastian Raschka建立的mlxtend库提供了bias_variance_decomp()函数,可以对一个模型采用多重自采样(multiple bootstrap samples)的方式来评估偏差和方差。

首先,你需要安装mlxtend库,例如:

sudo  pip install mlxtend

下面这个例子是直接通过URL载入波士顿房价数据集,划分为训练集和测试集,然后估计出对于线性回归均方根误差(MSE),以及采用200次自采样所获得的偏差和方差模型误差。

#estimate the bias and variance for a regression model
frompandas import read_csv
fromsklearn.model_selection import train_test_split
fromsklearn.linear_model import LinearRegression
frommlxtend.evaluate import bias_variance_decomp
#load dataset
url ='https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.csv'
dataframe= read_csv(url, header=None)
#separate into inputs and outputs
data= dataframe.values
X, y= data[:, :-1], data[:, -1]
#split the data
X_train,X_test, y_train, y_test = train_test_split(X, y, test_size=0.33,random_state=1)
#define the model
model= LinearRegression()
#estimate bias and variance
mse,bias, var = bias_variance_decomp(model, X_train, y_train, X_test, y_test,loss='mse', num_rounds=200, random_seed=1)
#summarize results
print('MSE:%.3f' % mse)
print('Bias:%.3f' % bias)
print('Variance:%.3f' % var)

执行上述代码,记录估计出的误差和模型的偏差和方差。

注意:考虑到算法或评估过程的自然随机性或者是数值精度的不同,你的结果有可能会存在很大的差异。你可以考虑把这段代码反复执行几次,比较结果的平均值。

本例中,我们可以看到这个模型具有高偏差和低方差。这是预料之中的,因为我们用的是线性回归模型。我们还可以看到估计平均值加上方差等于模型的评估误差,即20.726+1.1761=22.487。

MSE:22.487
Bias:20.726
Variance:1.761

深入了解

如果您想进一步了解,本节将提供更多有关该主题的资源。

  • 教程

机器学习中的偏差-方差权衡:

https://machinelearningmastery.com/gentle-introduction-to-the-bias-variance-trade-off-in-machine-learning/

  • 书籍

《统计学习及其在R中的应用》,2014版:

https://amzn.to/2RC7ElX

《预测模型应用》,2013版:

https://amzn.to/3a7Yzrc

  • 文章

偏差-方差权衡,维基百科:

https://en.wikipedia.org/wiki/Bias%E2%80%93variance_tradeoff

偏差方差分解,MLxtend库:

http://rasbt.github.io/mlxtend/user_guide/evaluate/bias_variance_decomp/

总结

在这篇教程中,你掌握了如何计算一个机器学习模型的偏差和方差。

具体而言,你学到了:

  • 模型误差包含模型方差、模型偏差以及不可约误差。
  • 我们寻求具有低偏差和低方差的模型,但是一般情况下一个值的缩小会导致另一个值的增大。
  • 如何将均方误差分解成模型的偏差和方差。

原文标题:

How to Calculate the Bias-Variance Trade-off with Python

原文链接:

https://machinelearningmastery.com/calculate-the-bias-variance-trade-off/

编辑:黄继彦

校对:林亦霖

译者简介

吴振东,法国洛林大学计算机与决策专业硕士。现从事人工智能和大数据相关工作,以成为数据科学家为终生奋斗目标。来自山东济南,不会开挖掘机,但写得了Java、Python和PPT。

THU数据派
THU数据派

THU数据派"基于清华,放眼世界",以扎实的理工功底闯荡“数据江湖”。发布全球大数据资讯,定期组织线下活动,分享前沿产业动态。了解清华大数据,敬请关注姐妹号“数据派THU”。

工程方差偏差机器学习Python
相关数据
逻辑回归技术

逻辑回归(英语:Logistic regression 或logit regression),即逻辑模型(英语:Logit model,也译作“评定模型”、“分类评定模型”)是离散选择法模型之一,属于多重变量分析范畴,是社会学、生物统计学、临床、数量心理学、计量经济学、市场营销等统计实证分析的常用方法。

欠拟合技术

使用太少参数,以致于不能很好的拟合数据,称为拟合不足(欠拟合)现象

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

人工智能技术

在学术研究领域,人工智能通常指能够感知周围环境并采取行动以实现最优的可能结果的智能体(intelligent agent)

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

数据科学技术

数据科学,又称资料科学,是一门利用数据学习知识的学科,其目标是通过从数据中提取出有价值的部分来生产数据产品。它结合了诸多领域中的理论和技术,包括应用数学、统计、模式识别、机器学习、数据可视化、数据仓库以及高性能计算。数据科学通过运用各种相关的数据来帮助非专业人士理解问题。

超参数技术

在机器学习中,超参数是在学习过程开始之前设置其值的参数。 相反,其他参数的值是通过训练得出的。 不同的模型训练算法需要不同的超参数,一些简单的算法(如普通最小二乘回归)不需要。 给定这些超参数,训练算法从数据中学习参数。相同种类的机器学习模型可能需要不同的超参数来适应不同的数据模式,并且必须对其进行调整以便模型能够最优地解决机器学习问题。 在实际应用中一般需要对超参数进行优化,以找到一个超参数元组(tuple),由这些超参数元组形成一个最优化模型,该模型可以将在给定的独立数据上预定义的损失函数最小化。

随机森林技术

在机器学习中,随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。 Leo Breiman和Adele Cutler发展出推论出随机森林的算法。而"Random Forests"是他们的商标。这个术语是1995年由贝尔实验室的Tin Kam Ho所提出的随机决策森林(random decision forests)而来的。这个方法则是结合Breimans的"Bootstrap aggregating"想法和Ho的"random subspace method" 以建造决策树的集合。

均方根误差技术

平方平均数(Quadratic mean),简称方均根(Root Mean Square,缩写为 RMS),是2次方的广义平均数的表达式,也可叫做2次幂平均数。常用于计算误差

线性回归技术

在现实世界中,存在着大量这样的情况:两个变量例如X和Y有一些依赖关系。由X可以部分地决定Y的值,但这种决定往往不很确切。常常用来说明这种依赖关系的最简单、直观的例子是体重与身高,用Y表示他的体重。众所周知,一般说来,当X大时,Y也倾向于大,但由X不能严格地决定Y。又如,城市生活用电量Y与气温X有很大的关系。在夏天气温很高或冬天气温很低时,由于室内空调、冰箱等家用电器的使用,可能用电就高,相反,在春秋季节气温不高也不低,用电量就可能少。但我们不能由气温X准确地决定用电量Y。类似的例子还很多,变量之间的这种关系称为“相关关系”,回归模型就是研究相关关系的一个有力工具。

映射技术

映射指的是具有某种特殊结构的函数,或泛指类函数思想的范畴论中的态射。 逻辑和图论中也有一些不太常规的用法。其数学定义为:两个非空集合A与B间存在着对应关系f,而且对于A中的每一个元素x,B中总有有唯一的一个元素y与它对应,就这种对应为从A到B的映射,记作f:A→B。其中,y称为元素x在映射f下的象,记作:y=f(x)。x称为y关于映射f的原象*。*集合A中所有元素的象的集合称为映射f的值域,记作f(A)。同样的,在机器学习中,映射就是输入与输出之间的对应关系。

逻辑技术

人工智能领域用逻辑来理解智能推理问题;它可以提供用于分析编程语言的技术,也可用作分析、表征知识或编程的工具。目前人们常用的逻辑分支有命题逻辑(Propositional Logic )以及一阶逻辑(FOL)等谓词逻辑。

过拟合技术

过拟合是指为了得到一致假设而使假设变得过度严格。避免过拟合是分类器设计中的一个核心任务。通常采用增大数据量和测试样本集的方法对分类器性能进行评价。

量化技术

深度学习中的量化是指,用低位宽数字的神经网络近似使用了浮点数的神经网络的过程。

推荐文章
暂无评论
暂无评论~