机器学习中的数学——学习曲线如何区别欠拟合与过拟合
通过这篇博客,你将清晰的明白什么是如何区别欠拟合与过拟合。这个专栏名为白话机器学习中数学学习笔记,主要是用来分享一下我在 机器学习中的学习笔记及一些感悟,也希望对你的学习有帮助哦!感兴趣的小伙伴欢迎私信或者评论区留言!这一篇就更新一下《 白话机器学习中的数学——学习曲线:如何区别欠拟合与过拟合》
文章目录
- 一、过拟合
- 二、区分过拟合与欠拟合
- 三、高偏差和高方差
- 四、总结
一、过拟合
前面我们聊了很多过拟合的话题,即模型学习了很多训练集特有的属性。导致模型对于训练集有很好的拟合效果,而对于未知数据的预测能力很差,模型的泛化能力很差。而反过来又有一种叫作欠拟合的状态,用英文说是 underfitting。在这种情况下模型的性能也会变差。
一个是过度训练,一个是过度不训练。所以我们追求的是恰好训练,这个度是很难把握的,需要我们不断实验去挑战参数,最终达成最优效果。
欠拟合是与过拟合相反的状态,所以它是没有拟合训练数据的状态。用直线对图中这种拥有复杂边界线的数据进行分类的情况,无论怎样做都不能很好地分类,最终的精度会很差。

出现这种情况的主要原因就是模型相对于要解决的问题来说太简单了,原因也和过拟合的情况相反。过拟合与欠拟合基本上是相反关系,原因不同,解决方案也不同。解决欠拟合的方法有很多,比如增加数据量,增加训练次数等。
二、区分过拟合与欠拟合
但是,我们只对模型进行评估,然后根据得到的模型精度就能判断模型是过拟合还是欠拟合吗?显然,只根据精度不能判断是哪种不好的拟合。那怎么样才能判断到底是过拟合还是欠拟合呢?
我们以数据的数量为横轴、以精度为纵轴,然后把用于训练的数据和用于测试的数据画成图来看一看就知道了。我们具体来看一个例子吧。考虑一下使用这样的 10 个训练数据进行回归的场景:

这些数据似乎用二次函数来拟合比较合适。不过这里我们先假设 fθ(x)是一次函数。接着,只随便选择
其中的 2 个数据用作训练数据。那 fθ(x)就是这样的:

在这个状态下,2 个点都完美拟合,误差为 0。那这次把 10 个数据都用来训练呢?

不过在这种情况下,误差已经无法为 0 了。这里我想说的就是如果模型过于简单,那么随着数据量的
增加,误差也会一点点变大。换句话说就是精度会一点点下降。把这种情况画在刚才所说的以数据的数量为横轴、以精度为纵轴的图上,形状大体上就是这样的:

一开始精度很高,但随着数据量的增加,精度一点点地变低了。接下来用测试数据来评估一下。假设在刚才的 10 个训练数据之外,还有测试数据。我们用这些测试数据来评估各个模型,之后用同样的方法求出精度,并画成图。训练数据较少时训练好的模型难以预测未知的数据,所以精度很低;反过来说,训练数据变多时,预测精度就会一点点地变高。用图来展示就是这样的:

三、高偏差和高方差
将两份数据的精度用图来展示后,如果是这种形状,就说明出现了欠拟合的状态。也有一种说法叫作高偏差,指的是一回事。这是一种即使增加数据的数量,无论是使用训练数据还是测试数据,精度也都会很差的状态。

而在过拟合的情况下,图是这样的。这也叫作高方差:

随着数据量的增加,使用训练数据时的精度一直很高,而使用测试数据时的精度一直没有上升到它的水准。也就是说,只对训练数据拟合得较好,这就是过拟合的特征。这张图中需要注意的点在这里:

这两张图分别展示了欠拟合和过拟合的特征。
四、总结
像这样展示了数据数量和精度的图称为学习曲线。在知道模型精度低,却不知道是过拟合还是欠拟合的时候,画一下学习曲线就好了。通过学习曲线判断出是过拟合还是欠拟合之后,就可以采取相应的对策以便改进模型了。模型评估听上去很简单,但其实有很多内容。关于模型评估的指标和方法,除了今天讲的之外还有其他的,有兴趣的话大家自己研究一下哦。
相关文章:
机器学习中的数学——学习曲线如何区别欠拟合与过拟合
通过这篇博客,你将清晰的明白什么是如何区别欠拟合与过拟合。这个专栏名为白话机器学习中数学学习笔记,主要是用来分享一下我在 机器学习中的学习笔记及一些感悟,也希望对你的学习有帮助哦!感兴趣的小伙伴欢迎私信或者评论区留言&…...
【Java】类和对象,封装
目录 1.类和对象的定义 2.关键字new 3.this引用 4.对象的构造及初始化 5.封装 //包的概念 //如何访问 6.static成员 7.代码块 8.对象的打印 1.类和对象的定义 对象:Java中一切皆对象。 类:一般情况下一个Java文件一个类,每一个类…...
Python小姿势 - 知识点:
知识点: Python的字符串格式化 标题: Python字符串格式化实例解析 顺便介绍一下我的另一篇专栏, 《100天精通Python - 快速入门到黑科技》专栏,是由 CSDN 内容合伙人丨全站排名 Top 4 的硬核博主 不吃西红柿 倾力打造。 基础知识…...
【Python】【进阶篇】9、Django路由系统精讲
目录 Django路由系统精讲1. Django 路由系统应用1)配置第一个URL实现页面访问2)正则与正则分组使用3)正则捕获组使用 2. path()与re_path() Django路由系统精讲 在《URL是什么》一节中,我们对 URL 有了基本的认识,在本…...
在Linux操作系统上部署wgcloud监控
1.wgcloud监控介绍 1.1 介绍 这是一款开源的主机监控系统,可以支持主机各种指标监测(cpu使用率,cpu温度,内存使用率,磁盘容量空间,磁盘IO,硬盘SMART健康状态,系统负载ÿ…...
浙大的SAMTrack,自动分割和跟踪视频中的任何内容
Meta发布的SAM之后,Meta的Segment Anything模型(可以分割任何对象)体验过感觉很棒,既然能够在图片上面使用,那肯定能够在视频中应用,毕竟视频就是一帧一帧的图片的组合。 果不其然浙江大学就发布了这个SAMTrack,就是在…...
Spring第三方资源配置管理
Spring第三方资源配置管理 1. 管理DataSource连接池对象1.1 管理Druid连接池【重点】1.2 管理c3p0连接池 2. 加载properties属性文件【重点】2.1 基本用法2.2 配置不加载系统属性2.3 加载properties文件写法 说明:以管理DataSource连接池对象为例讲解第三方资源配置…...
网络编程代码实例:多进程版
文章目录 前言代码仓库内容代码(有详细注释)server.cclient.cMakefile 结果总结参考资料作者的话 前言 网络编程代码实例:多进程版。 代码仓库 yezhening/Environment-and-network-programming-examples: 环境和网络编程实例 (github.com)E…...
一家传统制造企业的上云之旅,怎样成为了数字化转型典范?
众所周知,中国是一个制造业大国。在想要上云以及正在上云的企业当中,传统制造企业也占据了相当大的比例。 那么这类企业在实施数字化转型的时候,应该如何着手?我们不妨来看看一家传统制造企业的现身说法。 国茂股份的数字化转型诉…...
C++入门(C++)
目录 命名空间 1、命名空间的定义 2、命名空间的使用 1、加名空间名称和作用域限定符 2、使用using namespace 命名空间引入 3、使用using将命名空间中某个成员引入 C的输入与输出 缺省参数 1、缺省参数的概念 2、缺省参数分类 1、全缺省参数 2、半缺省参数 函数重载 1、函数重…...
Linux 利用网络同步时间
yum -y install ntp ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime ntpdate ntp1.aliyun.com 创建加入crontab echo "*/20 * * * * /usr/sbin/ntpdate -u ntp.api.bz >/dev/null &" >> /var/spool/cron/rootntp常用服务器 中国国家授…...
炫技亮点 SpringBoot下消灭If Else,让你的代码更亮眼
文章目录 背景案例第一阶段 萌芽第二阶段 屎上雕花第三阶段 策略工厂模式重构第四阶段 优化 总结 背景 大家好,我是大表哥laker。今天,我要和大家分享一篇关于如何使用策略模式和工厂模式消除If Else耦合问题的文章。这个方法能够让你的代码更加优美、简…...
免费ChatGPT接入网站-网站加入CHATGPT自动生成关键词文章排名
网站怎么接入chatGPT 要将ChatGPT集成到您的网站中,需要进行以下步骤: 注册一个OpenAI账户:访问OpenAI网站并创建一个账户。这将提供访问API密钥所需的身份验证凭据。 获取API密钥:在您的OpenAI控制台中,您可以找到您…...
PostgreSQL的数据类型有哪些?
数据类型分类 分类名称说明与其他数据库的对比布尔类型PG支持SQL标准的boolean数据类型与MySQL中的bool、boolean类型相同,占用1字节存储空间数值类型整数类型有2字节的smallint、4字节的int、8字节的bigint;精确类型的小数有numeric;非精确…...
Android 9.0 系统开机自启动第三方app
1.前言 在9.0的系统rom定制化开发中,在framework定制话的功能开发中,在内置的app中,有时候在系统开机以后会要求启动第三方app的功能,所以这就需要在监听开机完成的广播,然后在启动第三方app就可以了,接下来就需要在系统类中监听开机完成的广播流程来实现功能 2.系统开…...
一些想法:关于学习一门新的编程语言
很多人可能长期使用一种编程语言,并感到很有成就感和舒适感,发现学习一种新的编程语言的想法令人生畏而痛苦。或者可能知道并使用多种编程语言,但有一段时间没有学习新的语言。更或者可能只是好奇别人是如何潜心学习新的编程语言并迅速取得成…...
线性代数——矩阵
文章目录 版权声明基础概念矩阵的运算矩阵的加法数与矩阵相乘矩阵的乘法矩阵的转置 矩阵和方程组方阵和行列式伴随矩阵可逆矩阵分块矩阵矩阵的初等变换初等矩阵等价矩阵行阶梯矩阵行最简矩阵初等变换在矩阵求解中的应用 矩阵的秩 版权声明 本文大部分内容皆来自李永乐老师考研…...
taro之小程序持续集成
小程序持续集成 Taro 小程序端构建后支持 CI(持续集成)的插件 tarojs/plugin-mini-ci。 目前已支持(企业)微信、京东、字节、支付宝、钉钉、百度小程序 功能包括: 构建完毕后自动唤起小程序开发者工具并打开项目上传…...
Ceph入门到精通-Ceph 编排器简介
第 1 章 Ceph 编排器简介 作为存储管理员,您可以将 Ceph 编排器与 Cephadm 实用程序搭配使用,能够发现设备并在 Red Hat Ceph Storage 集群中创建服务。 1.1. 使用 Ceph Orchestrator Red Hat Ceph Storage Orchestrators 是经理模块,主要…...
【Feign扩展】OpenFeign日志打印Http请求参数和响应数据
SpringBoot使用log4j2 在Spring Boot中所有的starter 都是基于spring-boot-starter-logging的,默认使用Logback。使用Log4j2的话,你需要排除 spring-boot-starter-logging 的依赖,并添加 spring-boot-starter-log4j2的依赖。 配置依赖 <…...
智能汽车人机交互与ADAS系统融合:架构、场景与工程实践
1. 项目概述:当驾驶舱的“大脑”与“眼睛”开始对话“集成人机交互和ADAS系统”——这个标题听起来像是一个纯粹的工程命题,但在我过去十多年的汽车电子开发经历中,我越来越深刻地体会到,这其实是一个关于“人、车、路”三者关系如…...
Fast-GitHub浏览器插件:国内开发者必备的GitHub下载加速终极解决方案
Fast-GitHub浏览器插件:国内开发者必备的GitHub下载加速终极解决方案 【免费下载链接】Fast-GitHub 国内Github下载很慢,用上了这个插件后,下载速度嗖嗖嗖的~! 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 还…...
嵌入式Linux驱动开发pinctrl篇(1)——从寄存器到子系统:驱动演进之路
嵌入式Linux驱动开发pinctrl篇(1)——从寄存器到子系统:驱动演进之路 仓库已经开源!所有教程,主线内核移植,跑新版本imx-linux/uboot都在这里,或者一起来尝试跑7.0的Linux!欢迎各位大…...
在野火征途Pro上跑RT-Thread:手把手教你为自研RISC-V SoC移植操作系统
在野火征途Pro上跑RT-Thread:手把手教你为自研RISC-V SoC移植操作系统 当一块裸板首次点亮LED时,那种成就感就像电子工程师的"Hello World"。但要让这块板子真正活起来,操作系统是不可或缺的灵魂。本文将带你从零开始,在…...
手把手教你用VSCode+OpenOCD实时查看HPM6750外设寄存器(附SVD文件配置)
手把手教你用VSCodeOpenOCD实时监控HPM6750寄存器状态 调试嵌入式系统时,最令人头疼的莫过于面对一个"黑箱"——明明程序在跑,却看不到硬件寄存器的实时状态。这种盲目操作就像蒙着眼睛修车,效率低下且容易出错。本文将彻底解决这个…...
告别WMMA API:用PTX的LDMATRIX和MMA指令在Ampere架构上重构你的FP16矩阵乘法内核
从WMMA到PTX:在Ampere架构上重构FP16矩阵乘法的深度实践 当开发者第一次接触Nvidia的Tensor Core编程时,WMMA(Warp Matrix Multiply Accumulate)API往往是首选方案。这套高层抽象接口屏蔽了硬件细节,让开发者能够快速实…...
中控SCADA的VBS脚本玩不转了?试试用Python来“降维打击”,搞定复杂数据处理与模型调用
中控SCADA的VBS脚本玩不转了?试试用Python来“降维打击”,搞定复杂数据处理与模型调用 在工业自动化领域,中控SCADA系统长期扮演着数据采集与监控的核心角色。然而,当项目需求从简单的数据记录升级到需要复杂分析、预测性维护或实…...
从Simulink到Tina:硬件工程师如何更“接地气”地获取电路传递函数?
从Simulink到Tina:硬件工程师如何更“接地气”地获取电路传递函数? 在系统级仿真与PCB调试的鸿沟之间,硬件工程师常常面临一个尴尬的现实:Simulink的数值解虽然精确,却像黑箱般难以直接指导电路板上电阻电容的调整。当…...
PostgreSQL列式存储革命:cstore_fdw完整指南与10个性能优化技巧
PostgreSQL列式存储革命:cstore_fdw完整指南与10个性能优化技巧 【免费下载链接】cstore_fdw Columnar storage extension for Postgres built as a foreign data wrapper. Check out https://github.com/citusdata/citus for a modernized columnar storage implem…...
Linux 绝对路径与相对路径详解——新手再也不迷路
前言在Linux中,无论是查看文件、修改配置,还是切换目录,都离不开“路径”——路径就像是文件和目录的“地址”,指引我们在庞大的文件系统中找到目标。对于新手来说,最容易混淆的就是“绝对路径”和“相对路径”&#x…...
