衡量一个机器学习模型的性能,可以用偏差和方差作为依据。

一个高偏差的模型,总是会对数据分布做出强假设,比如线性回归。而一个高方差的模型,总是会过度依赖于它的训练集,例如未修剪的决策树。我们希望一个模型的偏差和方差都很低,但更多情况下我们需要在二者之间做出权衡。

在选择和调整模型时,“偏差-方差权衡”是一个非常有用的概念。当然它在一般情况下是无法直接计算的,因为这需要这一问题领域内的全部知识,而我们并不具备。尽管如此,我们可以评估出一个模型的误差,并将其拆分成偏差和方差两部分,从而借此了解该模型的运行方式。
……………………………………………

偏差、方差、不可约误差

机器学习模型是用来做预测任务的,例如回归或分类。

一个模型预测性能可以用对未参与训练的样本做预测后的误差来表示,我们将其视作是模型误差。

误差(模型):
模型误差可以被分解为三个部分:模型的方差、模型的偏差以及不可约误差的方差。

误差(模型):
误差(模型)= 方差(模型)+ 偏差(模型)+ 方差(不可约误差)

让我们仔细看看这三个术语。

模型偏差

偏差用于衡量一个模型拟合的输入和输出之间关系与真实情况的近似程度。

这能获得模型的刚度:模型对于输入和输出之间的函数的假设强度。

“这能够反映出模型的拟合结果与真实规律之间的差距。” ——《预测模型应用》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

参考文献

进一步了解:

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

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

《预测模型应用》,2013版

- 文章
偏差-方差权衡,维基百科

偏差方差分解,MLxtend库

机器学习模型中,偏差与方差的权衡及计算相关推荐

  1. 模型的偏差与方差的理解

    本文转载于http://blog.csdn.net/xmu_jupiter/article/details/47314927 版权声明:本文为博主原创文章,欢迎转载,但请注明出处~ 目录(?)[+] ...

  2. 一文讲述如何将预测范式引入到机器学习模型中

    作者 | Filip Piekniewski 编译 |ziqi zhang 随着人工智能的持续深入,深度学习技术在多智能体学习.推理系统和推荐系统上取得了很大进展. 对于多智能体来说,预测能力有着关键 ...

  3. 吴恩达机器学习作业5.偏差和方差

    机器学习作业 5 - 偏差和方差 import numpy as np import scipy.io as sio import scipy.optimize as opt import panda ...

  4. 吴恩达机器学习课后作业——偏差和方差

    1.写在前面 吴恩达机器学习的课后作业及数据可以在coursera平台上进行下载,只要注册一下就可以添加课程了.所以这里就不写题目和数据了,有需要的小伙伴自行去下载就可以了. 作业及数据下载网址:吴恩 ...

  5. 机器学习:贝叶斯和优化方法_Facebook使用贝叶斯优化在机器学习模型中进行更好的实验

    机器学习:贝叶斯和优化方法 I recently started a new newsletter focus on AI education. TheSequence is a no-BS( mea ...

  6. 利用colab保存模型_在Google Colab上训练您的机器学习模型中的“后门”

    利用colab保存模型 Note: This post is for educational purposes only. 注意:此职位仅用于教育目的. In this post, I would f ...

  7. 如何平衡机器学习中偏差与方差

    本文介绍偏差与方差的概念和K折交叉验证,并通过示例展示其实现过程. 方差与偏差 为了评估模型在数据集上的表现,我们需要衡量模型预测与观测数据的匹配程度.对于回归模型,通常使用的指标是MSE(mean ...

  8. 机器学习入门:偏差和方差

    偏差(bias):偏差衡量了模型的预测值与实际值之间的偏离关系. 方差(variance):方差描述的是训练数据在不同迭代阶段的训练模型中,预测值的变化波动情况(或称之为离散情况) 我们这里以线性回归 ...

  9. 西瓜书+实战+吴恩达机器学习(二)机器学习基础(偏差、方差、调试模型技巧)

    文章目录 0. 前言 1. 偏差方差的解决方法 2. 高偏差高方差的学习曲线 3. 调试模型技巧 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔,我会非常开心的~ 0. 前言 泛化误差可分解为 ...

最新文章

  1. LeetCode算法题8:递归和回溯1
  2. [zz]mysql 和 mongo db 语法对比
  3. Spring tx:advice/
  4. pycharm在创建py文件时如何自动注释
  5. java 抛出异常效率_Java异常处理机制
  6. linux db2在线备份,DB2 pureScale在线备份恢复实例
  7. node版本管理和npm源管理工具
  8. 原理解析 | Apache Flink 结合 Kafka 构建端到端的 Exactly-Once 处理
  9. 2017 【第八届蓝桥杯省赛】 C/C++ B组
  10. 移位和位运算相关算法题学习积累
  11. 微带天线馈电方法 [搬运]
  12. 腾讯优图实现人脸对比
  13. 赵小楼:《天道》《遥远的救世主》深度解析(22)丁元英为什么不问肖亚文以后有什么打算?
  14. Day 7 输出m到n之间的素数
  15. android放微信短视频文件,参考微信实现的短视频录像
  16. RTP:一种实时应用的传输协议 (RFC-3550)
  17. SHA256 算法实现
  18. CSS 清除浮动的方法
  19. .NETCore——依赖注入
  20. 185.[USACO Oct08] 挖水井 (第三次考试大整理)

热门文章

  1. 越狱后的iBooks问题
  2. GitHub是个啥?咋用?
  3. XML+XSL 实例
  4. [信息系统安全实验] 实验1.Web安全
  5. 相机下载_美颜轻相机最新版下载-美颜轻相机app下载v1.70206 安卓版
  6. 2023中职组网络安全技能竞赛——代码审计解析(超级详细)
  7. 【汇总】js简介es6-12语法
  8. 开发工具-Atom下载及安装
  9. python爬取“百度小姐姐”
  10. 我就是我,颜色不一样的花火...