机器学习中的方差与偏差

文章目录

  • 方差与偏差
    • 1.1 数据
      • 1.1.1 数据的分布
      • 1.1.2 拟合
    • 1.2 方差与偏差
      • 1.2.1 泛化误差的拆分
      • 1.2.2 理解方差偏差
    • 1.3 方差-偏差trade-off
      • 1.3.1 方差-偏差trade-off
      • 1.3.2 方差与偏差诊断
    • 1.4 降低策略
      • 1.4.1 噪声
      • 1.4.2 高偏差
      • 1.4.3 高方差

方差与偏差

1.1 数据

1.1.1 数据的分布

  • 我们考虑一个简单的多项式回归问题,假设存在一个二次分布函数 f ( x ) f(x) f(x) 如下图所示3

    我们需要从中抽取一些(图中只画了5个,假设足够多)数据来进行我们的回归任务4

    而现实中的数据往往都包含一定的噪声 ,所以我们抽样过程,也需要模拟这一步,我们用 y y y 表示我们抽样出的数据点的真实值 y t r u e y_{true} ytrue , 另 $y = f(x) + \epsilon $ ,其中 ϵ \epsilon ϵ 为我们自己加上的噪声,抽样完成的点可以如下图所示:5

    好了,现在我们可以抛弃 f ( x ) f(x) f(x) (实际中我们也只知道 y 而不知道y的分布,或者说我们通常所说的模型$$ 6

  • 总结下即:从分布函数 f ( x ) f(x) f(x) 中,以 y = f ( x ) + ϵ y=f(x) + \epsilon y=f(x)+ϵ 采样 N N N个样本数据 ,用D表示数据,则
    D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x n , y n ) } = { ( x i , y i ) } i = 1 N \begin{aligned} \mathop{D} &= \{ (x_1,y_1),(x_2,y_2),...,(x_n,y_n) \} \\ &=\{(x_i,y_i)\}_{i=1}^{N} \end{aligned} D={(x1,y1),(x2,y2),...,(xn,yn)}={(xi,yi)}i=1N
    其中 ϵ \epsilon ϵ 服从与均值为 0,方差为 σ 2 \sigma^2 σ2 的正态分布
    ϵ ∼ N ( 0 , σ 2 ) \epsilon \sim \mathop{N}(0,\sigma^2) ϵN(0,σ2)
    7


1.1.2 拟合

  • 如下图,我们分别使用不同的多项式来拟合,怎样判断哪个模型的好坏呢?8

    备注:给定 n + 1 n+1 n+1 个数据点,存在唯一一个最高阶为 n n n 的多项式通过全部数据点。


1.2 方差与偏差

1.2.1 泛化误差的拆分

  • 从分布函数 f ( x ) f(x) f(x) 中,我们以 y = f ( x ) + ϵ y=f(x) + \epsilon y=f(x)+ϵ 采样 N N N个样本数据 D = { ( x i , y i ) } i = 1 N D=\{(x_i,y_i)\}_{i=1}^{N} D={(xi,yi)}i=1N ,设我们学习到的多项式模型用 f ^ ( x ) \hat f (x) f^(x) 表示,损失函数使用Loss 使用MSE
    M S E = ( y − f ^ ( x ) ) 2 \mathop{MSE} = \left(y-\hat f(x)\right)^2 MSE=(yf^(x))2
    为了方便公式推导,使用 f f f 代替 f ( x ) f(x) f(x),使用 f ^ \hat f f^ 代替 f ^ ( x ) \hat f(x) f^(x) ,

    则我们的泛化误差(期望风险 E D E_D ED)表示为
    E D = E D [ L o s s ] = E [ ( y − f ^ ) 2 ] = E [ ( f + ϵ − f ^ ) 2 ] = E [ ( f + ϵ − f ^ + E [ f ^ ] − E [ f ^ ] ) 2 ] = E [ ( ( f − E [ f ^ ] ) + ϵ − ( f ^ − E [ f ^ ] ) ) 2 ] = E [ ( f − E [ f ^ ] ) 2 + ϵ 2 + ( f ^ − E [ f ^ ] ) 2 ] + E [ 2 ⋅ ( f − E [ f ^ ] ) ⋅ ϵ − 2 ⋅ ( f − E [ f ^ ] ) ⋅ ( f ^ − E [ f ^ ] ) − 2 ⋅ ( f ^ − E [ f ^ ] ) ⋅ ϵ ] = E [ ( f − E [ f ^ ] ) 2 + ϵ 2 + ( f ^ − E [ f ^ ] ) 2 ] = B i a s [ f ^ ] 2 + V a r [ f ^ ] + σ 2 \begin{aligned} E_D & = E_D[Loss] \\ &=E[(y-\hat f)^2] \\ &=E[(f+\epsilon-\hat f)^2] \\ &=E[\left(f+\epsilon-\hat f + E[\hat f] - E[\hat f] \right)^2]\\ &=E[\left((f- E[\hat f])+\epsilon-(\hat f - E[\hat f]) \right)^2]\\ &=E\left[(f-E[\hat f])^2 + \epsilon^2 + (\hat f - E[\hat f])^2 \right]\\ &+E\left[ 2\cdot(f- E[\hat f])\cdot\epsilon-2\cdot(f- E[\hat f])\cdot(\hat f - E[\hat f])-2\cdot(\hat f - E[\hat f])\cdot\epsilon \right] \\ &=E\left[(f-E[\hat f])^2 + \epsilon^2 + (\hat f - E[\hat f])^2\right]\\ &=Bias[\hat f]^2 +Var[\hat f] + \sigma^2 \end{aligned} ED=ED[Loss]=E[(yf^)2]=E[(f+ϵf^)2]=E[(f+ϵf^+E[f^]E[f^])2]=E[((fE[f^])+ϵ(f^E[f^]))2]=E[(fE[f^])2+ϵ2+(f^E[f^])2]+E[2(fE[f^])ϵ2(fE[f^])(f^E[f^])2(f^E[f^])ϵ]=E[(fE[f^])2+ϵ2+(f^E[f^])2]=Bias[f^]2+Var[f^]+σ2
    其中:

    1. 第四步中是同时加上和减去一个 E [ f ^ ] E[\hat f] E[f^]
    2. ϵ ∼ N ( 0 , σ 2 ) → E [ ϵ ] = 0 , V a r [ ϵ ] = σ 2 \epsilon \sim N(0,\sigma^2)\to E[\epsilon] = 0,Var[\epsilon] = \sigma^2 ϵN(0,σ2)E[ϵ]=0,Var[ϵ]=σ2
  • 总结就是:使用以MSE为损失函数,其泛化误差可以分解为由偏差、方差和数据本身噪音的组合
    E D = B i a s [ f ^ ] 2 + V a r [ f ^ ] + σ 2 E_D=Bias[\hat f]^2 +Var[\hat f] + \sigma^2 ED=Bias[f^]2+Var[f^]+σ2
    其中,噪声在统计上市无法被模型减少的,所以主要关注组成泛化误差的两个主要部分

    1. 由偏差bias导致的误差
    2. 由方差vars导致的误差

1.2.2 理解方差偏差

  • 上面从数学公式的角度推导出以MSE为损失函数,其泛化误差可以分解为由偏差、方差和数据本身噪音的组合,现在以图形的方式更为一般的描绘方差、偏差、泛化误差之间的关系(图中没法打出 f ^ \hat f f^ ,用 f ∗ f* f表示 )image-20230719210842436

    1. 偏差(Bias) : 偏差衡量了模型 f ^ \hat f f^ 的 预测值与 实际值 f ( x ) f(x) f(x) 之间的偏离关系(图中 y = f ( x ) y=f(x) y=f(x) 未考虑噪声),偏差越大,越偏离真实数据。
    2. 方差(vars):模型 f ^ \hat f f^ 的 预测值的方差,描述预测值的变化范围,离散程度,方差越大,预测值的分布越散。
  • 下面是4种方差和偏差的组合1

    1. 低方差vs低偏差 : 这是最好的情况
  1. 低方差vs高偏差:通常出现在刚开始训练时
    3. 高方差vs低偏差:一般最常见的过拟合情况,模型较为贴合训练集,导致其泛化能力差
    4. 高方差vs高偏差:这是最坏的情况,意味着不仅准确度低,而且数据差异还大
  • 理想情况下,我们希望得到一个不论在训练集还是未知测试集上都表现非常好的模型,不幸的是我们通常不可能完全做到这两件事。以上面回归的例子来说,我们分别使用不同的多项式来拟合,每个不同的多项式即是一个模型,不同模型的选择其实也是在方差和偏差之间做权衡9

    通过方差和偏差的诊断可以帮助弄清如何提升模型的表现,多项式次数越高,代表模型越复杂,可以学到的东西就越多,如最后一个4阶多项式image-20230731232520461

    以图中的5个数据点举例,有且只有唯一个四阶多项式能经过这5个点,这样就意味着该模型将整体数据已经全部记住,那么如果我们来了一个新的数据就会导致模型完全无法识别出。

  • 事实上,通常情况下模型的训练误差和泛化误差之间的关系,以及泛化误差与方差偏差之间的关系可以由以下两张图表示12

    将这两张图对应到多项式回归的例子中则是,我们给定了数据 D ,期望利用多项式回归去学习出一个曲线 f ^ \hat f f^,那么此时我们可以通过拟合多项式的次数来控制学习曲线的复杂度了(理想状态下):

    1. 刚开始可以尝试一阶线性方程,此时学习器的拟合能力弱,学习曲线预测值和我们真实值之间的差距较大,此时偏差主导了泛化误差,而此时训练数据的扰动不足以使学习器产生显示变化;
    2. 随着我们将多项式次数增加到二阶,学习器的拟合能力增强了,意味着学习曲线预测值和我们真实值之间的差距在逐渐拉小,即偏差在下降,此时的方差会逐渐上升并开始影响泛化误差;
    3. 最后我们将多项式的次数增加到四阶,则我们学到了唯一一条穿过每个点的4阶多项式曲线(假设之后5个数据点),此时学习器相当于记住了整个数据集,学习曲线的预测值和真实值完美重叠,偏差为0,但是这时候若有个新的数据进来,我们的学习曲线预测值会发生显著的变化。

    可以总结为:

    1. 多项式次数越高,模型越复杂,模型越复杂,在训练集上的训练误差越低(甚至可以记住整个数据集,即训练误差降到0);
    2. 随着训练误差降低(模型变复杂),泛化误差先上升后降低;
    3. 偏差会随着模型复杂度增高而降低,方差会随着模型复杂度增高而上升

1.3 方差-偏差trade-off

1.3.1 方差-偏差trade-off

  • 在泛化误差的拆分公式部分,得出要关注组成泛化误差的两个主要部分

    1. 由偏差bias导致的误差
    2. 由方差vars导致的误差

    而通过方差、偏差与泛化误差变化图可以看出,偏差与方差并非同增同涨的关系,通常情况下我们都需要进行方差和偏差的权衡,意味着我们必须减少其中一项而增加另一项,对应于我们的多项式回归问题来说,训练误差、泛化误差之间的关系图如下image-20230725201353547

    同时我们可以确定(权衡)相对较好的模型 2


1.3.2 方差与偏差诊断

  • 从上述图我们还可以得出一些比较有用的经验法则,最简单的判断模型是受方差还是受偏差影响较多的办法是:

    1. 如果你的模型在训练集上表现非常好,但是在测试集上却非常糟糕,这是典型的过拟合问题,是方差过大问题
    2. 若你的模型在训练集、测试集上都表现不好,这是典型的欠拟合问题,是偏差过大问题

    欠拟合 = 偏差问题 过拟合 = 方差问题 欠拟合=偏差问题 \\ 过拟合=方差问题 欠拟合=偏差问题过拟合=方差问题

  • 再次总结下方差问题与偏差问题的特征

    • 高偏差问题

      1. 高训练误差
      2. 高测试误差
    • 高方差问题

      1. 低训练误差
      2. 特别高测试误差

      image-20230719211616754

  • 诊断之后,我们需要做什么呢?当然是想办法解决,当然解决是不可能解决的,真如之前说过的,偏差和方差是有冲突的,只能尽量降低影响,降低的方法汇总参考下图image-20230731232235112


1.4 降低策略

1.4.1 噪声

  • 如上述采样 y = f ( x ) + ϵ y=f(x) + \epsilon y=f(x)+ϵ 中,噪声 ϵ \epsilon ϵ 在统计意义上是无法被消除的,但是可以从数据的采集,清洗,数据预处理等方面提升数据的质量来达到降低数据噪声的目的


1.4.2 高偏差

  • 这里将重点放在增加模型复杂度

    • 让相同的算法变得更加复杂,通常从模型结构入手。 例如,
      1. 回归模型可以用更高阶多项式
      2. 决策树可以有更多的深度
    • 更改为更复杂的算法/模型。 例如,
      1. 将回归算法更改为神经网络
      2. 将决策树更改为随机森林
  • 然而,增加模型复杂度并不一定是好事,我们可能会经历下面的困境

    1. 模型越复杂也意味着越多计算开销(例如单个决策树与 100 棵树的随机森林)
    2. 更多的模型复杂性依赖于更复杂的模型特征工程
    3. 更复杂通常意味着相反解释能力。 当我们选择更复杂的模型,我们的模型因为更难解释,因为大多数复杂的模型都很难被解释
    4. 更加复杂可能会增加以下风险:过拟合

1.4.3 高方差

  • 获取更多的数据

    如果有足够的计算能力来训练更多的数据,获取更多的数据总是最好的选择,但是获取更多的数据通常是既昂贵又耗时

  • 使用正则化防止过拟合

    在分类或者回归问题中,正则化项通常是指在损失函数中添加额外项的过程,通常是为了引入对更简单模型的偏好(防止模型过度复杂)。

  • 减少特征数量

    过拟合的主要解决方案之一是减少特征数量

    1. 手动选择需要保留的特征(前向选择,后向选择,方差过滤、互信息、F检验、相关性等过滤法)
    2. 自动选择要 保留或扔掉的特征(embedding,warapper等)

    缺点:在丢弃特征的过程中,可能会有有用的信息遗失

  • 超参数调优

    一个简单的算法与良好的调整参数往往会比一个不充分调参的复杂算法产生的模型效果更好,超参数可以控制模型的复杂性(正则化),可以控制训练算法的行为,而超参数调整是为算法寻找最优超参数的过程,常用的超参数调优算法有

    1. 网格搜索
    2. 对半搜索
    3. 随机搜索
    4. 贝叶斯优化

    那么什么是参数和超参数的区别呢?

    • 超参数:超参数是在训练算法开始之前指定的,无法优化 在训练算法本身中。它们是模型的外部参数。有一下的特点:
      1. 通常用于帮助估计模型参数
      2. 无法从数据中估计
      3. 它们通常由从业者指定
      4. 通常不会在训练过程中改变。
    • 模型参数:模型参数取决于你用什么算法,用于拟合数据,它们是模型的外部参数。有以下的特点:
      1. 模型在进行预测时需要它们
      2. 它们是从数据中估计或学习的
      3. 它们通常不由从业者手动设置
      4. 值通常由学习算法选择,如线性回归或神经网络的权重
      5. 会在训练过程中改变。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/4191.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣 有效的括号

括号匹配问题,找到符合的进行抵消。 题目 从题可以看出是嵌套的括号先匹配先做抵消,类似就近原则,这也是栈的典型例题。可以通过枚举多种不同的情况慢慢用if与else做返回。 时间复杂度:O(n),其中 n 是字符串的长度。…

js: 区分后端返回数字是否为null、‘-’ 或正常number类型数字。

问&#xff1a; 这是我的代码<CountTo v-if!isNaN(Number(item.num))> <span v-else>{{item.num}}</span> 我希望不是null的时候走countTo&#xff0c;是null的时候直接<span>{{item.num}}</span>显示 回答&#xff1a; 最终结果&#xff1a; …

Chapter5.4 Loading and saving model weights in PyTorch

5 Pretraining on Unlabeled Data 5.4 Loading and saving model weights in PyTorch 训练LLM的计算成本很高&#xff0c;因此能够保存和加载LLM的权重至关重要。 ​ 在PyTorch中&#xff0c;推荐的方式是通过将torch.save函数应用于.state_dict()方法来保存模型权重&#x…

运动相机拍视频过程中摔了,导致录视频打不开怎么办

3-11 在使用运动相机拍摄激烈运动的时候&#xff0c;极大的震动会有一定概率使得保存在存储卡中的视频出现打不开的情况&#xff0c;原因是存储卡和相机在极端情况下&#xff0c;可能会出现接触不良的问题&#xff0c;如果遇到这种问题&#xff0c;就不得不进行视频修复了。 本…

Python制作简易PDF查看工具PDFViewerV1.0

PDFViewer PDF浏览工具&#xff0c;Python自制PDF查看工具&#xff0c;可实现基本翻页浏览功能&#xff0c;其它功能在进一步开发完善当中&#xff0c;如果有想一起开发的朋友&#xff0c;可以留言。本软件完全免费&#xff0c;自由使用。 软件界面简洁&#xff0c;有菜单栏、…

SpringBoot实现定时任务,使用自带的定时任务以及调度框架quartz的配置使用

SpringBoot实现定时任务&#xff0c;使用自带的定时任务以及调度框架quartz的配置使用 文章目录 SpringBoot实现定时任务&#xff0c;使用自带的定时任务以及调度框架quartz的配置使用一. 使用SpringBoot自带的定时任务&#xff08;适用于小型应用&#xff09;二. 使用调度框架…

Output

AUTOSAR OS模块详解(三) Alarm 本文主要介绍AUTOSAR OS的Alarm&#xff0c;并对基于英飞凌Aurix TC3XX系列芯片的Vector Microsar代码和配置进行部分讲解。 文章目录 AUTOSAR OS模块详解(三) Alarm1 简介2 功能介绍2.1 触发原理2.2 工作类型2.3 Alarm启动方式2.4 Alarm配置2.5…

openharmony应用开发快速入门

开发准备 本文档适用于OpenHarmony应用开发的初学者。通过构建一个简单的具有页面跳转/返回功能的应用&#xff08;如下图所示&#xff09;&#xff0c;快速了解工程目录的主要文件&#xff0c;熟悉OpenHarmony应用开发流程。 在开始之前&#xff0c;您需要了解有关OpenHarmon…

使用傅里叶变换进行图像边缘检测

使用傅里叶变换进行图像边缘检测 今天我们介绍通过傅里叶变换求得图像的边缘 什么是傅立叶变换&#xff1f; 简单来说&#xff0c;傅里叶变换是将输入的信号分解成指定样式的构造块。例如&#xff0c;首先通过叠加具有不同频率的两个或更多个正弦函数而生成信号f&#xff08;x…

用户中心项目教程(四)---Vue脚手架完成前端初始化

目录 1.项目的创建 2.使用开发工具打开 3.项目运行方法 4.使用按钮组件 5.全局注册 6.如何进行组件的测试 7.使用组件的效果展示 8.关于这个vue项目内容的说明 1.项目的创建 这个前提你是你完成了我的教程&#xff08;三&#xff09;里面的相关配置&#xff0c;不然你可…

《自动驾驶与机器人中的SLAM技术》ch4:基于预积分和图优化的 GINS

前言&#xff1a;预积分图优化的结构 1 预积分的图优化顶点 这里使用 《自动驾驶与机器人中的SLAM技术》ch4&#xff1a;预积分学 中提到的散装的形式来实现预积分的顶点部分&#xff0c;所以每个状态被分为位姿&#xff08;&#xff09;、速度、陀螺零偏、加计零偏四种顶点&am…

二叉搜索树(TreeMapTreeSet)

文章目录 1.概念2.二叉搜索树的底层代码实现(1)首先构建二叉树(2)实现插入功能&#xff1b;(3)实现查找(4)删除&#xff08;重点&#xff09; 3.TreeMap 1.概念 TreeMap&TreeSet都是有序的集合都是基于二叉搜索树来实现的 二叉搜索树&#xff1a;是一种特殊的二叉树 若左子…

【QT用户登录与界面跳转】

【QT用户登录与界面跳转】 1.前言2. 项目设置3.设计登录界面3.1 login.pro参数3.2 界面设置3.2.1 登录界面3.2.2 串口主界面 4. 实现登录逻辑5.串口界面6.测试功能7.总结 1.前言 在Qt应用程序开发中&#xff0c;实现用户登录及界面跳转功能是构建交互式应用的重要步骤之一。下…

基于springboot的口腔管理平台

作者&#xff1a;学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等 文末获取“源码数据库万字文档PPT”&#xff0c;支持远程部署调试、运行安装。 项目包含&#xff1a; 完整源码数据库功能演示视频万字文档PPT 项目编码&#xff1…

4 AXI USER IP

前言 使用AXI Interface封装IP&#xff0c;并使用AXI Interface实现对IP内部寄存器进行读写实现控制LED的demo&#xff0c;这个demo是非常必要的&#xff0c;因为在前面的笔记中基本都需哟PS端与PL端就行通信互相交互&#xff0c;在PL端可以通过中断的形式来告知PS端一些事情&…

实力认证 | 海云安入选《信创安全产品及服务购买决策参考》

近日&#xff0c;国内知名安全调研机构GoUpSec发布了2024年中国网络安全行业《信创安全产品及服务购买决策参考》&#xff0c;报告从产品特点、产品优势、成功案例、安全策略等维度对各厂商信创安全产品及服务进行调研了解。 海云安凭借AI大模型技术在信创安全领域中的创新应用…

二、点灯基础实验

嵌入式基础实验第一个就是点灯&#xff0c;地位相当于编程界的hello world。 如下为LED原理图&#xff0c;要让相应LED发光&#xff0c;需要给I/O口设置输出引脚&#xff0c;低电平&#xff0c;二极管才会导通 2.1 打开初始工程&#xff0c;编写代码 以下会实现BLINKY常亮&…

Amazon MSK 开启 Public 访问 SASL 配置的方法

1. 开启 MSK Public 1.1 配置 MSK 参数 进入 MSK 控制台页面&#xff0c;点击左侧菜单 Cluster configuration。选择已有配置&#xff0c;或者创建新配置。在配置中添加参数 allow.everyone.if.no.acl.foundfalse修改集群配置&#xff0c;选择到新添加的配置。 1.2 开启 Pu…

大模型UI:Gradio全解11——Chatbot:融合大模型的聊天机器人(4)

大模型UI&#xff1a;Gradio全解11——Chatbot&#xff1a;融合大模型的聊天机器人&#xff08;4&#xff09; 前言本篇摘要11. Chatbot&#xff1a;融合大模型的多模态聊天机器人11.4 使用Blocks创建自定义聊天机器人11.4.1 简单聊天机器人演示11.4.2 立即响应和流式传输11.4.…

流量分析复现(第十八届信息安全大赛 第二届长城杯 )

zeroshell_1 题目&#xff1a;从数据包中找出攻击者利用漏洞开展攻击的会话&#xff08;攻击者执行了一条命令&#xff09;&#xff0c;写出该会话中设置的flag, 结果提交形式&#xff1a;flag{xxxxxxxxx} 这里大致的思路还是先看看&#xff0c;流量协议的分级 主要还是以TCP流…