吴恩达2022机器学习专项课程C2W3:2.25 理解方差和偏差(诊断方差偏差正则化偏差方案搭建性能学习曲线)

目录

  • 引言
  • 名词替代
  • 影响模型偏差和方差的因素
    • 1.多项式阶数
    • 2.正则化参数
  • 判断是否有高偏差或高方差
    • 1.方法一:建立性能基准水平
    • 2.方法二:建立学习曲线
  • 总结

引言

机器学习系统开发的典型流程是从一个想法开始,然后训练模型。初次训练的结果通常不理想,因此关键在于如何决定下一步该做什么以提高模型性能。观察算法的偏差和方差(Bias and Variance)在很多应用场景中能很好地指导下一步的改进。

名词替代

J_train:训练误差
J_cv:交叉验证误差
J_test:测试误差

影响模型偏差和方差的因素

1.多项式阶数

(1)什么是高偏差和高方差

  • 如果用一条直线来拟合数据,效果不好,则认为此时模型有高偏差,高偏差的模型J_train和J_cv都很高,表现为欠拟合。
  • 如果用一个四阶多项式来拟合数据,则认为此时模型有高方差,高方差的模型J_train很低,但J_cv很高,表现为过拟合。
  • 如果用一个二次多项式来拟合数据,效果最好,此时模型既没有高偏差也没有高方差,合适的模型J_train和J_cv都较低。

在这里插入图片描述


(2) 模型复杂度对模型表现的影响

当多项式阶数(模型复杂度)增加时:

  • J_train会下降,因为模型变得更加复杂,更能拟合训练数据,此时模型高偏差。
  • J_cv在多项式次数(d)很低时很高,表示欠拟合,此时模型高偏差;在多项式次数(d)很高时也很高,表示过拟合,此时模型高方差。

只有在适中的多项式次数(如二次多项式)时,模型的J_train和J_cv都较低,表现最好。 因此要选择一个合适的多项式次数,使模型在训练数据和未见过的数据上都有较好的表现,达到偏差和方差的平衡。

在这里插入图片描述


(3)结论

  • 高偏差(欠拟合):主要指标是J_train高,表示模型在训练集上表现不好。通常J_train和J_cv接近。

  • 高方差(过拟合):主要指标是J_cv远高于J_train,即J_cv >> J_train。训练误差低但交叉验证误差高,表明模型在训练数据上表现好但在新数据上表现差。

  • 同时存在高偏差和高方差:这种情况较少见,但在某些复杂模型如神经网络中可能出现。表现为训练误差高,交叉验证误差更高。

  • 关键在于:高偏差表示模型在训练集上表现不好,高方差表示模型在交叉验证集上比在训练集上表现差得多。
    在这里插入图片描述


2.正则化参数

(1)过大的λ和过小的λ

λ过大导致模型高偏差(欠拟合),w参数几乎为0没有影响了,只有λ的常量值,此时模型绘制出来就是一条线,因此无法拟合训练样本,Jtrain较高。λ过小导致模型高方差(过拟合),Jcv远大于Jtrain。最终,合适的λ值能平衡偏差和方差,减少训练集和验证集的误差。
在这里插入图片描述


(2)通过交叉验证选择适合的λ

类似于之前选择多项式阶数的方法,先设定λ值(如λ=0),最小化成本函数得到参数,然后计算J_cv。不断尝试不同的λ值,逐步翻倍,并计算每次的J_cv。最终,通过比较不同λ值对应的J_cv差,选择J_cv最小的λ值及其对应的参数。最后,用J_test评估算法的泛化性能,并展示J_train和J_cv如何随λ变化。
在这里插入图片描述


(3)正则化参数λ对模型表现的影响

当正则化参数(λ)变大时:

  • λ=0时表示没有正则化,容易过拟合(高方差),J_train小而J_cv大。
  • λ值很大时会欠拟合(高偏差),导致J_train和J_cv都很大。随着λ增大,J_train增加。两端λ值过大或过小时J_cv都会增加。

适中的λ值可以使模型性能最佳,J_train和J_cv都较低。 最终得出结论:通过交叉验证尝试不同的λ值,选择J_cv最小的λ值,可以得到合适的模型。类似于选择多项式次数,两者图形在偏差和方差方面是镜像关系。

在这里插入图片描述


判断是否有高偏差或高方差

1.方法一:建立性能基准水平

(1)语音识别案例概述
训练一个语音识别系统,J_train(没有正确转录的部分占总体的比例)为10.8%,J_cv(测试系统性能)为14.8%。尽管10.8%看起来像是高偏差,但通过与人类表现(10.6%误差)对比,发现算法在训练集上的表现接近人类水平,仅差0.2%。真正的问题是J_cv比J_train高很多,有4%的差距,这表明算法存在高方差问题,而不是高偏差问题。通过这样的基准测试,可以更准确地判断算法性能的不足之处。
在这里插入图片描述


(2)建立性能基准水平的三种方法
在判断训练误差是否高时,建立性能的基准水平很有用。基线水平帮助你对学习算法的误差有合理的预期。

  • 常见的方法是衡量人类在该任务上的表现,因为人类通常擅长处理非结构化数据(如音频、图像或文本)。
  • 另一种方法是参考已有的竞争算法或之前的实现,通过测量这些算法的性能来建立基准。
  • 有时也可以根据之前的经验进行猜测。
    在这里插入图片描述
    (3)性能基准水平判断高偏差和高方差
    首先,通过建立性能基准水平(如人类表现)和测量训练误差及交叉验证误差来评估算法的性能。
  • (左侧)如果训练误差高于基线水平,则算法存在高偏差。
  • (中间)如果交叉验证误差远高于训练误差,则表明算法有高方差。

通过这些数值差距,可以直观地判断算法的问题。(右侧)有时算法可能同时存在高偏差和高方差,具体表现为训练误差高于基线水平,且训练误差与交叉验证误差之间的差距很大。理解这些指标有助于更好地分析和改进算法。
在这里插入图片描述


(4)小结
判断算法是否有高偏差的一种方法是看训练误差是否大,然而,在某些应用中,数据可能嘈杂,零误差不现实,因此建立性能基准很有用。你可以将训练误差与期望误差(如人类表现)对比,来判断误差是否大。同样,比较交叉验证误差和训练误差,来判断算法是否有高方差问题。通过这些方法,可以准确评估算法的偏差和方差问题。此外,学习曲线也是理解算法性能的一个有用工具。

2.方法二:建立学习曲线

学习曲线(Learning curves)是一种帮助你了解学习算法性能如何的方式,曲线随着经验的数量发生变化。,经验数量指的是算法所拥有的训练样本数。
(1)训练样本数的变化与J_train,J_cv
学习曲线帮助了解学习算法性能随训练样本数量变化的方式。横轴表示训练样本数,纵轴表示误差,包括训练误差(J_train)和交叉验证误差(J_cv)。当训练样本增多,交叉验证误差减少,因为模型变得更好。而训练误差则会增加,因为随着样本增多,模型很难完美拟合所有训练样本。少量样本时,训练误差接近零,但样本增多后,误差会增加。

通常交叉验证误差比训练误差高,因为模型更好地拟合了训练集。
在这里插入图片描述


(2)高偏差的学习曲线
高偏差情况下,训练误差和交叉验证误差随着样本增加,初期会下降但随后趋于平稳。这是因为模型太简单(如线性函数),无法适应更多数据,即使增加训练数据,误差也不会降低。

通过比较基准线(如人类表现),可以看到J_train与基准线的较大误差(间隙较大),说明高偏差问题。结论是,如果算法有高偏差,增加更多训练数据效果不大,需要其他方法改善算法性能。
在这里插入图片描述


(3)高方差的学习曲线
高方差情况下,训练误差(J_train)随训练集变大而增加,但交叉验证误差(J_cv)更高,两者之间差距大,表明模型在训练集上表现好但不能泛化。高方差的信号是交叉验证误差远高于训练误差。

增加训练数据有助于降低交叉验证误差,使其接近训练误差,从而改善算法性能。因此,扩展训练集对高方差算法有显著帮助,但对高偏差算法效果不大。总结来说,更多的训练数据可以帮助高方差算法降低误差,提高性能。在这里插入图片描述


总结

正常来讲,先判断模型出现了什么问题,通过建立性能基准水平或学习曲线,观察模型出现了高方差还是高偏差。然后在根据影响方差或偏差的因素,选择对应的方案优化模型。下一篇会通过案例应用本篇的两个过程。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【docker】Linux安装最新版Docker完整教程

这里写目录标题 一、安装前准备工作1.1、安装依赖包1.2、设置阿里云镜像源 二、安装Docker2.1、docker-ce安装2.2、启动docker2.3、启动docker并设置开机自启 三、 优化docker配置3.1、访问阿里云官方镜像加速器地址3.2、设置阿里云加速地址 一、安装前准备工作 1.1、安装依赖…

资源分享—2021版乡级制图规范符号库

汇总整理超图平台软件相关的各类资源(包括但不限于符号库、地图模板、地理处理模型等),助力项目的高效制图、提高数据生产效率等业务。 本次分享新版国土空间规划【2021版乡级制图规范符号库】,提供SuperMap格式符号库下载。 符…

信号与系统实验MATLAB-实验1-信号的MATLAB表示及信号运算

实验1-信号的MATLAB表示及信号运算 一、实验目的 1、掌握MATLAB的使用; 2、掌握MATLAB生成信号波形; 3、掌握MATLAB分析常用连续信号; 4、掌握信号运算的MATLAB实现。 二、实验内容 编写程序实现下列常用函数,并显示波形。…

python返回每个数 青少年编程电子学会python编程等级考试三级真题解析2021年9月

python返回每个数 2021年9月 python编程等级考试级编程题 一、题目要求 1、编程实现 给定一个整数 num,从1到 num 按照下面的规则返回每个数! 如果这个数被 3 整除,返回 Apple。 如果这个数被 5 整除,返回Pie’。 如果这个数能同时被 3 和…

竟然与 package-lock.json 更新有关!部分用户 H5 页面白屏问题!

一.问题 1 场景 现象 接到部分用户反馈进入xxx H5 页面空白; 研发测日志里问题用户的线上页面URL地址可以正常访问,没有复现问题!!! 定位问题 监控平台和客户端日志报错: SyntaxError: Unexpected toke…

百递云·API开放平台「智能地址解析API」助力地址录入标准化

地址信息的正确录入,是保证后续物流配送环节能够顺畅运行的必备前提,错误、不规范的收寄地址将会产生许多困扰甚至造成损失。 ✦地址信息通常包含国家、省、城市、街道、楼宇、门牌号等多个部分,较为复杂,填写时稍有疏忽就会出现…

数据结构:手撕代码——顺序表

目录 1.线性表 2.顺序表 2.1顺序表的概念 2.2动态顺序表实现 2.2-1 动态顺序表实现思路 2.2-2 动态顺序表的初始化 2.2-3动态顺序表的插入 检查空间 尾插 头插 中间插入 2.2-4 动态顺序表的删除 尾删 头删 中间删除 2.2. 5 动态顺序表查找与打印、销毁 查找 …

使用fvm切换flutter版本

切换flutter版本 下载fvm 1、dart pub global activate fvm dart下载fvm 2、warning中获取下载本地的地址 3、添加用户变量path: 下载地址 终端查看fvm版本 fvm --version 4、指定fvm文件缓存地址 fvm config --cache-path C:\src\fvm(自定义地址&…

使用Zed 实现测距

目录 1. 导入相关库 2. 相机初始化设置 3. 获取中心点深度数据 4. 计算中心点深度值 5. 完整代码 此代码基于官方代码基础上进行改写,主要是获取zed相机深度画面中心点的深度值,为yolo测距打基础。 Zed相机是由Stereolabs公司开发的一种先进的立体视觉相机。这种相机专…

LinkFinder使用记录

在Windows上使用linkfinder报出如下错误: 解决办法: 进入linkfinder.py中将如下代码注释掉即可~ print("URL to access output: file://%s" % os.path.abspath(args.output))

使用Leaflet库创建交互式地图:技术解析与实践

一:引言 在现代Web开发中,地图可视化已成为许多项目不可或缺的一部分。Leaflet是一个开源的JavaScript库,用于在Web页面上创建交互式地图。它简单易用、轻量级且高度可定制,使得开发者能够快速地创建出具有丰富功能的地图应用。本…

618有什么值得推荐?2024数码产品推荐,轻松拿捏选购!

随着618购物节即将来临,你是否已被琳琅满目的商品所吸引,难以抉择?团团特意为你筛选出一系列经过亲身试验的优质好物,旨在帮助你在这场购物盛宴中迅速锁定心仪之选。这些推荐不仅走在时尚的前沿,更能满足你日常生活的各…

java:spring使用【XXXPostProcessor】添加bean定义,修改bean定义、代理bean

# 项目代码资源&#xff1a; 可能还在审核中&#xff0c;请等待。。。 https://download.csdn.net/download/chenhz2284/89433361 # 项目代码 【pom.xml】 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-start…

GaussDB技术解读——GaussDB架构介绍(三)

目录 9 智能关键技术方案 智能关键技术一&#xff1a;自治运维系统 智能关键技术二&#xff1a;库内AI引擎 智能关键技术三&#xff1a;智能优化器 10 驱动接口关键技术方案 GaussDB架构介绍&#xff08;二&#xff09;从数据持久化存取层(DataNode)关键技术方案、全局事…

list容器的基本使用

目录 前言一&#xff0c;list的介绍二&#xff0c;list的基本使用2.1 list的构造2.2 list迭代器的使用2.3 list的头插&#xff0c;头删&#xff0c;尾插和尾删2.4 list的插入和删除2.5 list 的 resize/swap/clear 前言 list中的接口比较多&#xff0c;与string和vector类似&am…

全面解说Facebook代投菲律宾真金游戏pwa广告全流程

全面解说Facebook代投菲律宾真金游戏pwa广告全流程 随着数字营销的不断发展&#xff0c;社交媒体平台如Facebook已成为广告主们争相投放的热门渠道。对于希望拓展菲律宾市场的真金游戏企业来说&#xff0c;了解并掌握在Facebook上投放广告的具体流程显得尤为重要。本文将详细介…

SQL SERVER触发器记录指定的几笔资料更新记录

1.目的 为了记录数据库表中资料数据动态的变更&#xff0c;实时动态且方便调整记录的范围。 2.分析 需求:记录UPDATE 修改的记录 if exists(select 1 from inserted) and exists(select 1 from deleted) &#xff1a;修改if (exists (select 1 from inserted) and n…

[Nacos]No spring.config.import property has been defined

在学习 Spring Cloud Alibaba &#xff0c;Nacos组件&#xff0c;创建一个cloudalibaba-config-nacos-client&#xff0c;加载多配置集时遇到问题 配置了 bootstrap.yml 后启动项目报错&#xff1a; 是因为在springcloud 2020.0.2版本中把bootstrap的相关依赖从spring-cloud-s…

电脑文件msvcr120.dll丢失怎样修复?具体的msvcr120.dll修复方法分享

电脑文件msvcr120.dll丢失是一种比较常见的现象&#xff0c;只要是经常使用电脑的人&#xff0c;那么遇到msvcr120.dll丢失的次数就越多&#xff0c;今天主要来给大家聊一下msvcr120.dll丢失的各种解决方法。 一.电脑文件msvcr120.dll msvcr120.dl是由Microsoft提供的关键系统…

Qt飞机大战小游戏

Gitee地址 &#xff1a;plane-game: 基于Qt的飞机大战小游戏 GitHub地址&#xff1a; https://github.com/a-mo-xi-wei/plane-game