偏差(Bias)和方差(Variance)——机器学习中的模型选择

2023-05-16

模型性能的度量

在监督学习中,已知样本 $(x_1, y_1),(x_2, y_2),...,(x_n, y_n)$,要求拟合出一个模型(函数)$\hat{f}$,其预测值$\hat{f}(x)$与样本实际值$y$的误差最小。

考虑到样本数据其实是采样,$y$并不是真实值本身,假设真实模型(函数)是$f$,则采样值$y=f(x)+\varepsilon$,其中$\varepsilon$代表噪音,其均值为0,方差为$\sigma^2$。

拟合函数$\hat{f}$的主要目的是希望它能对新的样本进行预测,所以,拟合出函数$\hat{f}$后,需要在测试集(训练时未见过的数据)上检测其预测值与实际值$y$之间的误差。可以采用平方误差函数(mean squared error)来度量其拟合的好坏程度,即 $(y-\hat{f}(x))^2$

误差期望值的分解

经过进一步的研究发现,对于某种特定的模型(下面还会进一步说明“特定模型”的含义),其误差的期望值可以分解为三个部分:样本噪音、模型预测值的方差、预测值相对真实值的偏差

公式为:
$$E((y-\hat{f}(x))^2) = \sigma^2 + Var[\hat{f}(x)] + (Bias[\hat{f}(x)])^2$$
其中 $Bias[\hat{f}(x)] = E[\hat{f}(x) - f(x)]$

即:误差的期望值 = 噪音的方差 + 模型预测值的方差 + 预测值相对真实值的偏差的平方
先看一个图比较直观。

图1 误差期望值的分解

使用特定模型对一个测试样本进行预测,就像打靶一样。

靶心(红点)是测试样本的真实值,测试样本的y(橙色点)是真实值加上噪音,特定模型重复多次训练会得到多个具体的模型,每一个具体模型对测试样本进行一次预测,就在靶上打出一个预测值(图上蓝色的点)。所有预测值的平均就是预测值的期望(较大的浅蓝色点),浅蓝色的圆圈表示预测值的离散程度,即预测值的方差。

所以,特定模型的预测值 与 真实值 的误差的 期望值,分解为上面公式中的三个部分,对应到图上的三条橙色线段:预测值的偏差、预测值的方差、样本噪音。

理解误差期望值

回顾一下,期望值的含义是指在同样的条件重复多次随机试验,得到的所有可能状态的平均结果(更详细的定义参考维基百科-期望值)。对于机器学习来说,这种实验就是我们选择一种算法(并选定超参数),以及设置一个固定的训练集大小,这就是同样的条件,也就是上文所说的特定的模型。然后每次训练时从样本空间中选择一批样本作为训练集,但每次都随机抽取不同的样本,这样重复进行多次训练。每次训练会得到一个具体的模型,每个具体模型对同一个未见过的样本进行预测可以得到预测值。不断重复训练和预测,就能得到一系列预测值,根据样本和这些预测值计算出方差和偏差,就可以帮助我们考察该特定模型的预测误差的期望值,也就能衡量该特定模型的性能。对比多个特定模型的误差的期望值,可以帮助我们选择合适的模型。

进一步理解误差期望值

再看一个更接近实际的例子,来自 Bias-Variance in Machine Learning

我们设置真实模型 $f(x) = x + 2sin(1.5x)$,函数图像如下图曲线所示。
样本值 y 就在真实值的基础上叠加一个随机噪音 N(0, 0.2)。

图2 模型及样本

现在我们用线性函数来构建模型,训练样本来自随机采集的一组 y,经过多次重复,可以得到一系列具体的线性模型,如下图中那一组聚集在一起的黑色直线所示,其中间有一条红色线是这一组线性函数的平均(期望值)。这就是特定模型(线性函数)在同样条件下(每次取20个样本点)重复多次(得到50个线性函数)。

根据生成的50个具体的线性函数来考察该线性模型的预测性能,选取一个样本点,比如选择 x=5 时(下图中红色竖线位置),真实值 f(x) = 6.876,样本 $y \approx 6.876$,y 与 f(x) 的偏差体现在图片右下方的噪音(noise) 部分。红色线性函数在 x=5 位置的值是这50个线性函数在该位置的期望值,黑色直线在 x=5 位置的一系列值的分布则反映了它们的方差(Variance)。50个预测的期望值与真实值 f(x) 之间的距离体现了偏差(Bias)。(参考下图右下部分的 variance 和 bias)。

图3 偏差、方差计算

总之,在机器学习中考察 偏差 和 方差,最重要的是要在不同数据集上训练出一组特定模型,这些模型对一个测试样本进行预测,考察这一组预测值的方差和偏差。

误差的期望值公式推导

误差的期望值公式为什么可以分解为 噪音、偏差和方差,可以从数学上推导得来。先准备几个推导中需要用到的公式,为了方便,我们简化符号,记作
$$f = f(x) \
hat{f} = hat{f}(x)$$

  1. 方差的定义和计算公式

$$Var[X] = E[X^2] - (E[X])^2$$
即 随机变量X的方差 = X平方的期望 - X期望的平方(参考 维基百科-方差),移项后得到
$$E[X^2] = Var[X] + (E[X])^2 \qquad(1)$$

  1. 测试样本y的期望值

因为真实值$f$是一个确定的值,所以
$$E[f] = f$$
另外根据上文测试样本值和噪音的定义
$$y=f+varepsilon \
E[varepsilon]=0 \
Var[varepsilon] = sigma^2$$
所以$E[y] = E[f+\varepsilon] = E[f] = f$,即
$$E[y] = f \qquad(2)$$

  1. 测试样本y的方差

$$ Var[y] = E[(y - E[y])^2] = E[(y-f)^2] \\ = E[(f+\varepsilon-f)^2] = E[\varepsilon^2] \\ = Var[\varepsilon] + (E[\varepsilon])^2 = \sigma^2 $$


$$Var[y] = \sigma^2 \qquad(3)$$

  1. 样本噪音与预测值无关

因为 $\varepsilon$ 与 $\hat{f}$ 不相关,所以
$$E[\varepsilon\hat{f}] = E[\varepsilon]E[\hat{f}] \qquad(4) $$
(参考维基百科-期望值)

  1. 误差的期望

公式推导如下

$$ E[(y-\hat{f})^2] = E[y^2 + \hat{f}^2 - 2y\hat{f}] \\ = E[y^2] + E[\hat{f}^2] - E[2y\hat{f}] \\ = \Big(Var[y] + (E[y]))^2 \Big) + \Big(Var[\hat{f}] + (E[\hat{f}])^2 \Big) - E[2(f+\varepsilon) \hat{f}] \\ = Var[y] + Var[\hat{f}] + (E[y])^2 + (E[\hat{f}])^2 - E[2f\hat{f} +2\varepsilon \hat{f}] \\ = Var[y] + Var[\hat{f}] + f^2 + (E[\hat{f}])^2 - E[2f\hat{f}] -E[2\varepsilon \hat{f}] \\ = Var[y] + Var[\hat{f}] + f^2 + (E[\hat{f}])^2 - 2fE[\hat{f}] -2E[\varepsilon]E[\hat{f}] \\ = Var[y] + Var[\hat{f}] + \Big(f^2 + (E[\hat{f}])^2 - 2fE[\hat{f}] \Big) \\ = Var[y] + Var[\hat{f}] + (f - E[\hat{f}])^2 \\ = \sigma^2 + Var[\hat{f}] + (Bias[\hat{f}])^2 $$

最后得到的三个项分别是:噪音的方差、模型预测值的方差、预测值相对真实值的偏差的平方。

偏差 - 方差的选择

理想中,我们希望得到一个偏差和方差都很小的模型(下图左上),但实际上往往很困难。


选择相对较好的模型的顺序:方差小,偏差小 > 方差小,偏差大 > 方差大,偏差小 > 方差大,偏差大。
方差小,偏差大 之所以在实际中排位相对靠前,是因为它比较稳定。很多时候实际中无法获得非常全面的数据集,那么,如果一个模型在可获得的样本上有较小的方差,说明它对不同数据集的敏感度不高,可以期望它对新数据集的预测效果比较稳定。

选择假设集合

很多时候,机器学习所面临的问题,我们事先并不确切的知道要拟合的是一个怎样形式的函数,是几次多项式,是几层神经网络,选择样本的哪些特征,等等,都缺乏先验的知识来帮助我们选择。我们在一个基本上无穷大的假设(模型)集合中,凭借有限的经验进行尝试和选择。

机器学习有多种算法,以及每种算法中经常又可以选择不同的结构和超参数。它们所覆盖的假设集合有不同的大小。所以,选择一种算法(包括其结构和超参数),就是选择(限定)了一个假设集合。我们期望真实模型存在于我们所选定的假设集合范围内,并且该假设集合越小越好。

下面两幅图粗略表现了不同假设集合的关系

不同的假设集合

正则化项对假设集合的影响

我们思考一下监督学习的整个流程,其实就是一个不断缩小假设集合的过程。从大的方面看可以分为两个步骤。

  1. 选择一个假设集合,包括模型及相关结构、超参数等。
  2. 使用样本数据进行训练,使该模型尽量拟合样本,就是从上面选定的假设集合中找到一个特定的假设(模型)。

上面第一个步骤中,我们可以选择一些不同的假设集合,然后通过考察它们的偏差方差,对各假设集合的性能进行评估。比如多项式的次数,上图假设真实模型是一个二次多项式,那么线性函数集合中的模型会欠拟合(方差低,偏差太高),高次多项式集合中的模型容易过拟合(方差太高,偏差低),二项式集合中的模型能够有较好的折中(方差和偏差都相对较低),总体误差最小。

偏差 - 方差权衡

下面几个案例来自 Andrew Ng 的公开课《Machine Learning》。

  1. 多项式回归

多项式回归模型,我们可以选择不同的多项式的次数,对模型的影响如下。

多项式次数对模型偏差方差的影响

多项式次数模型复杂度方差偏差过/欠拟合
欠拟合
适度
过拟合

多项式次数对训练误差/测试误差的影响

多项式次数模型复杂度训练误差测试误差
  1. 正则化项

添加正则化项(Regularization)相当于对模型参数施加惩罚,压缩了参数的范围,限制了模型的复杂度,从而有助于缓解模型过拟合问题,选择不同的 正则化项权重λ 对模型的影响如下。

正则化项对模型偏差方差的影响

正则化项权重λ模型复杂度方差偏差过/欠拟合
欠拟合
适度
过拟合

正则化项对训练误差/测试误差的影响

正则化项权重λ模型复杂度训练误差测试误差
  1. 样本数量

一般来说,我们希望样本数量越多越好。随着样本数量增加,训练误差会逐渐增长,测试误差会逐渐降低。

样本数量对训练误差/测试误差的影响

模型方差较高时,增加样本会有帮助

模型偏差较高时,增加样本帮助不大

  1. 神经网络

神经网络结构

神经网络结构模型复杂度方差偏差过/欠拟合
欠拟合
适度
过拟合

K-Fold 交叉验证

计算偏差、方差可以帮助评估不同的假设集合,不过它需要较多的样本,以及重复多次拟合模型,需要比较多的数据和计算资源(参考上面图3)。

实际中,比较常用的方法是K-Fold交叉验证。它与标准的偏差、方差计算过程不太一样。简单的说,就是将训练样本分成k份,每次取其中一份作为验证集,另外 k-1 份作训练集。这样进行 k 次训练得到 k 个模型。这 k 个模型对各自的验证集进行预测,得到 k 个评估值(可以是误差、准确率,或按某种规则计算的得分等等)。注意到每个样本参与了 k-1 个模型的训练(导致模型之间存在关联),每个样本有一次被用作测试(没有用另外的从未见过的测试集数据),所以这与标准的计算过程是不一样的。

不过,K-Fold依然是很有价值的模型性能评估。可以直接针对这 k 个模型的评估值(误差、准确率,或按某种规则计算的得分等等)进行分析,取其平均可以体现该模型的预测准确性。对这 k 个值,比如k个误差值,计算方差,可以反应该模型的预测误差的离散程度,即后续用于未见过的样本数据时,模型的预测准确性是否稳定。

参考

维基百科 - Bias–variance tradeoff
Bias-Variance in Machine Learning
维基百科 - 方差
维基百科 - 期望值
《Pattern Recognition and Machine Learning》之 3.2. The Bias-Variance Decomposition

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

偏差(Bias)和方差(Variance)——机器学习中的模型选择 的相关文章

随机推荐

  • 4G模块网络通信

    硬件平台驱动安装AT指令调试 采用内部协议栈 ppp拨号上网 硬件平台 HUAWEI ME909s 821 Windows7操作系统 43 Ubuntu Kylin 14 04操作系统 嵌入式开发板 驱动安装 Windows系统下的模块驱动
  • 如何使用NSOperations和NSOperationQueues(二)

    34 每一个应用程序至少有一个主线程 线程的工作就是去执行一系列的指令 在Cocoa Touch中 xff0c 主线程包含应用程序的主运行回路 几乎所有你写的代码都会在主线程中执行 xff0c 除非你特别创建 34 线程 每一个应用程序至少
  • [转注自官网]Cocos2d-x Tutorial 5 - 碰撞检测(Glede Edition for 2.0.3)

    Chapter5 碰撞检测 主人公能够放子弹了 xff0c 虽然子弹看起来很美 xff0c 但是怎么样来打到妖怪 xff1f 在这一章我们介绍一下最简单的碰撞检测方法去实现它 首先第一个 xff0c 我们有必要保存每个妖怪和子弹的指针 xf
  • Access check table exist before drop it.

    If drop an un exist table will get error 34 Table 39 TempTable 39 does not exist 34 use the following function Here is a
  • 腾讯赵建春:AI浪潮下的高效运维思考及实践

    GOPS 全球运维大会暨首届金牌运维峰会于11月17日 18日在上海圆满举行 腾讯 SNG 助理总经理 GOPS 金牌讲师赵建春老师受邀出席大会 xff0c 并带来精彩演讲 AI 浪潮下的高效运维思考与实践 本文根据此演讲实录整理而成 AI
  • 虚拟机开机连接的时候显示novnc_Linux-KVM虚拟化+websockify(noVNC)

    kvm安装 环境 xff1a centos7 1 查看CPU是否支持inter或AMD的虚拟技术 cat proc cpuinfo grep E 34 vmx svm 34 支持显示 2 安装kvm yum install qemu kvm
  • 云计算部署与管理----Openstack(一)

    一 云计算介绍 基于互联网的相关服务的增加 使用和交付模式 xff1b 这种模式提供可用的 便捷的 按需的网络访问 进入可配置的计算资源共享池 资源包括网络 服务器 存储 应用软件 服务 xff1b 这些资源能够被快速提供 只需投入很少的管
  • 嵌入式软件工程师需要哪些知识

    最近想不到好的专题 xff0c 所以与大家一起聊聊 xff0c 在我眼中 xff0c 一名优秀的嵌入式软件工程师需要具备哪些能力 嵌入式软件工程师需要哪些知识 基本职业技能 编码能力 xff1a 至少精通C C 43 43 语言进行codi
  • Docker 更新镜像

    docker镜像如下 xff1a 今天在运行的容器内使用 apt get update 命令进行更新时 xff0c 发下很多404错误 1 Err http archive ubuntu com wily updates restricte
  • 普通用户crontab -e报错

    root crontab e 34 crontab u5u4Zm crontab 34 34L 1478C written crontab installing new crontab var spool cron mkstemp Perm
  • 读书笔记之《Windows内核原理与实现》

    最近学习 Windows内核原理与实现 发现其博大精深 xff0c 粗略过了一遍 xff0c 很多东西比较茫然 xff0c 看书之余把书中涉及的函数 xff0c 结构 xff0c 全局变量的所在页数总结出来 xff0c 便于以后查阅 由于半
  • 使用者——初见Pixhawk

    是什么 Pixhawk简单介绍 直接使用二次开发 Pixhawk总体概述怎么用 Pixhawk初次使用 搭建调试环境初始化配置测试试飞调整参数提高性能 xff08 是什么 Pixhawk简单介绍 PixHawk是著名飞控厂商3DR推出的新一
  • Kazam 1.3.99 发布,Python 3端口和BUG修复

    Kazam 是一款linux上的简洁并且功能强大的桌面录制工具 xff0c 喜欢录屏的童鞋可以尝试下安装改软件 您也可以选择录制声音的支持和pulseaudio的任何声音设备输入 xff0c 记录任何VP8 WebM视频格式的视频 添加 P
  • XCOM串口助手打印不出数据

    本次实验是在基于原子的战舰开发板上的做定时器捕获实验 xff0c 程序源码下载到板子上运行正常 指示灯正常显示 xff0c 打开XCOM识别不来串口 xff0c 原因 xff1a 硬件上没有插USB转串口线 xff1b 连接上USB转串口线
  • Android+GPS轨迹跟踪器(一)

    Android 43 GPS轨迹跟踪器 今天的第一步 xff1a 获取Key 使用高德地图 xff0c 查看高德官方API xff1a http lbs amap com 使用Android studio做开发平台 xff08 我还纠结了Q
  • sdformatter格式化选项设置_SD卡低级格式化方法演示,需要用到SDFormatter

    相信很多用户在使用手机的时候都会遇到过sd内存卡无法被识别的情况 而遇到这一情况是无法通过一般的方法来修复的 xff0c 所以 xff0c 一般都会使用sdformatter对其进行低级格式化 可是 xff0c 对于没有接触过sdforma
  • 自己用树莓派做了一个电视盒子,还可以看优酷和cctv

    我刚接触树莓派时间不久 xff0c 安装过raspberry xff08 树莓派官方系统 xff09 xff0c ubuntu mate xff0c openelec等系统 xff0c openelec是一个电视盒子系统 xff0c 但是我
  • 关闭和开启USB功能

    关闭和开启USB功能 一 xff0c 开启USB功能 USB Enable 64 echo off step1 if exist C Windows INF usbstor inf cls amp goto step2 else cls a
  • 地面站进行航迹规划任务设置

    地面站 xff1a Qgound Control MissionPlayUAV gt 3 2版本 飞控 xff1a Pixhawk 连接 xff1a 数传连接 TCP UDP网络连接 设定任务 APM Pixhawk地面站航迹规划指令单 C
  • 偏差(Bias)和方差(Variance)——机器学习中的模型选择

    模型性能的度量 在监督学习中 xff0c 已知样本 x 1 y 1 x 2 y 2 x n y n xff0c 要求拟合出一个模型 xff08 函数 xff09 hat f xff0c 其预测值 hat f x 与样本实际值 y 的误差最小