当前位置: 首页 > news >正文

李宏毅机器学习课程学习笔记04 | 浅谈机器学习-宝可梦、数码宝贝分类器

文章目录

    • 案例:宝可梦、数码宝贝分类器
      • 第一步:需要定义一个含有未知数的function
      • 第二步:loss of a function
      • 如何Sample Training Examples => 如何抽样可以得到一个较好的结果
        • 如何权衡模型的复杂程度 Tradeoff of Model Complexity

todo
这里主要讲了如果挑选训练数据集,后续的内容在,等之后看到这里再补充笔记

案例:宝可梦、数码宝贝分类器

案例:需要找一个函数,输入一个动物,输出类别宝可梦还是数码宝贝

第一步:需要定义一个含有未知数的function

先对资料做一些观察,想象一下function应该长什么样。

观察发现①数码宝贝的线条比较复杂②宝可梦的线条比较简单 => 根据线条风格区分

使用一些工具包做Edge detection边缘检测后,将图片隐射成黑白,白色的为边缘,输出白色像素点的个数。白色像素点的个数超过某个阈值,说明线条复杂。

这个阈值h是一个未知参数,我们先假设函数只有这一个未知参数。

第二步:loss of a function

首先需要数据集D,loss根据数据集D算出

1.有数据集 D = { ( x 1 , y ^ 1 ) , . . . . , ( x n , y ^ n ) } D=\{(x^1,\hat{y}^1),....,(x^n,\hat{y}^n)\} D={(x1,y^1),....,(xn,y^n)},n表示第几个资料

x x x:输入宝可梦或者数码宝贝的图片

y ^ \hat y y^: 该图是宝可梦还是数码宝贝

2.先随机给个阈值h,然后根据资料D计算参数h的loss

数据集的损失L(h,D):输入阈值h和数据集D,输出错误率

每一笔资料的loss l ( h , x n , y ^ n ) ) l(h,x^n,\hat{y}^n)) l(h,xn,y^n)):h是f的参数,输入xn,输出yn,比较model值与真实值是否相等,不相等就输出0,相等就输出1

Error rate 很直观。也可以选择使用cross-entropy

如何Sample Training Examples => 如何抽样可以得到一个较好的结果

理想情况:假设我们可以收集所有的宝可梦和数码宝贝,其集合为 D a l l D_{all} Dall。我们找到了最好的阈值 h a l l h^{all} hall, h a l l = a r g min ⁡ h L ( h , D a l l ) h^{all} = arg\min_hL(h,D_{all}) hall=argminhL(h,Dall)

这里的损失函数不可以微分,所以没办法用梯度下降方法。但是h的个数其实是有限的,可以通过穷举的方法找出使损失函数值最小的阈值h。

事实情况:我们只能收集到 D a l l D_{all} Dall中的部分案例 D t r a i n D_{train} Dtrain(从all中随机抽样出来的案例,案例符合独立同分布), D t r a i n = { ( x 1 , y ^ 1 ) , . . . . , ( x n , y ^ n ) } D_{train}=\{(x^1,\hat{y}^1),....,(x^n,\hat{y}^n)\} Dtrain={(x1,y^1),....,(xn,y^n)}。可以找到 h t r a i n = a r g min ⁡ h L ( h , D t r a i n ) h^{train} = arg\min_hL(h,D_{train}) htrain=argminhL(h,Dtrain)

希望现实情况的 h t r a i n h^{train} htrain在所有数据集中的表现和 h a l l h^{all} hall在所有数据集中的表现越接近越好。

不同的 D t r a i n D_{train} Dtrain训练出来出来的 h t r a i n h^{train} htrain不同,这里 h t r a i n h^{train} htrain在所有数据集中的表现很依赖训练h时Sample到的数据集。

问题:我们希望 L ( h t r a i n , D a l l ) − L ( h a l l , D a l l ) ≤ δ L(h^{train},D_{all}) - L(h^{all},D_{all}) \leq \delta L(htrain,Dall)L(hall,Dall)δ,什么样的 D t r a i n D_{train} Dtrain训练出来的 h t r a i n h^{train} htrain可以满足这个期望?

h a l l h^{all} hall是从 D a l l D_{all} Dall中找出来让 L ( h a l l , D a l l ) L(h^{all},D_{all}) L(hall,Dall)最小的值,所以 L ( h t r a i n , D a l l ) L(h^{train},D_{all}) L(htrain,Dall)是大于等于 L ( h a l l , D a l l ) L(h^{all},D_{all}) L(hall,Dall)

不过 L ( h t r a i n , D t r a i n ) L(h^{train},D_{train}) L(htrain,Dtrain)是有可能小于 L ( h a l l , D a l l ) L(h^{all},D_{all}) L(hall,Dall)

Smaple出来的资料 D t r a i n D_{train} Dtrain,穷举所有可能的h(从1到10000),任意h满足 ∣ L ( h , D t r a i n ) − L ( h , D a l l ) ∣ ≤ δ 2 |L(h,D_{train}) - L(h,D_{all})| \leq \frac{\delta}{2} L(h,Dtrain)L(h,Dall)2δ,理想和显示就会很接近。 => D t r a i n D_{train} Dtrain D a l l D_{all} Dall分布很像。

问题:有多大的可能性Sample出来一个bad D t r a i n D_{train} Dtrain

  • 以下的讨论与模型无关
  • 以下的讨论对资料本来的分布无假设
  • 以下的讨论可以使用任何loss function

每一个坏的资料,背后都存在一个h使得 ∣ L ( h , D t r a i n ) − L ( h , D a l l ) ∣ > ϵ |L(h,D_{train}) - L(h,D_{all})| \gt \epsilon L(h,Dtrain)L(h,Dall)>ϵ => P ( D t r a i n i s b a d ) = ∪ h ∈ H P ( D t r a i n i s b a d d u e t o h ≤ ∑ h ∈ H P ( D t r a i n i s b a d d u e t o h ) P(D_{train} \ is \ bad) = \cup_{h \in \Eta} P(D_{train} \ is \ bad \ due \ to \ h\leq \sum_{h\in \Eta} P(D_{train} \ is \ bad \ due \ to \ h) P(Dtrain is bad)=hHP(Dtrain is bad due to hhHP(Dtrain is bad due to h)重叠的地方会多次被计算

由最后的式子可知, ∣ H ∣ |H| H是候选项h的数量,N是所选数据集 D t r a i n D_{train} Dtrain里资料的个数

  1. 增加训练样本数量,N越大 D t r a i n D_{train} Dtrain越接近 D a l l D_{all} Dall P ( D t r a i n i s b a d ) P(D_{train} \ is \ bad) P(Dtrain is bad)的概率越小。
  2. 较少模型复杂性,|H|候选项的数目越小,较少模型的复杂程度, P ( D t r a i n i s b a d ) P(D_{train} \ is \ bad) P(Dtrain is bad)的概率越小。

其实这些理论只是用来试图解释原理,但并没有人用在实际数据集中真正计算,因为计算的结果往往会大于1

最小样本量应该满足以下式子

问题:本案例中h的取值是离散的,所以 ∣ H ∣ |H| H是个确定值。当h取值是连续的, ∣ H ∣ |H| H是一个无穷 ,那 P ( D t r a i n i s b a d ) P(D_{train} \ is \ bad) P(Dtrain is bad)永远小于无穷大,那式子还有什么意思?

回答

  1. 在计算机中没有真正连续的东西,用计算机中的bit描述数值时,精度终究是有限的(所以就不是无穷的)。
  2. VC-dimension另外一种计算参数是连续时模型的复杂程度
如何权衡模型的复杂程度 Tradeoff of Model Complexity

理论上,理想与现实接近的方法

  1. 增加训练样本数量,N越大 D t r a i n D_{train} Dtrain越接近 D a l l D_{all} Dall P ( D t r a i n i s b a d ) P(D_{train} \ is \ bad) P(Dtrain is bad)的概率越小。
  2. 较少模型复杂性,|H|候选项的数目越小,较少模型的复杂程度, P ( D t r a i n i s b a d ) P(D_{train} \ is \ bad) P(Dtrain is bad)的概率越小。

问题:|H|太小会导致什么问题?模型复杂程度太小会导致什么问题?

|H|太小,能选择的h数量太少,可能找不到使 L ( h , D a l l ) L(h,D_{all}) L(h,Dall)最小的h。(大海捞针,针不在大海)

收集数据集中案例的个数N通常不是我们能控制的,可能想采用小的|H|来让理想和现实更接近。

=> 小的|H|会导致可选择的参数h数量变少,导致最优的 h a l l h^{all} hall在可选范围之外,也就是说得到一个较大的 L ( h a l l , D a l l ) L(h^{all},D_{all}) L(hall,Dall)

相关文章:

李宏毅机器学习课程学习笔记04 | 浅谈机器学习-宝可梦、数码宝贝分类器

文章目录 案例:宝可梦、数码宝贝分类器第一步:需要定义一个含有未知数的function第二步:loss of a function如何Sample Training Examples > 如何抽样可以得到一个较好的结果如何权衡模型的复杂程度 Tradeoff of Model Complexity todo 这…...

AIGC(生成式AI)试用 26 -- 跟着清华教程学习 - DeepSeek与AI幻觉

目标:继续学习 个人理解: - AI幻觉:一本正经的胡说八道,你还觉得很道理,倾向于相信;事实不一致,指令(预期)与实际不一致:跑题 - 潜在风险:把AI带坏了;信息误…...

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_conf_add_dump

ngx_conf_add_dump 定义在src\core\ngx_conf_file.c static ngx_int_t ngx_conf_add_dump(ngx_conf_t *cf, ngx_str_t *filename) {off_t size;u_char *p;uint32_t hash;ngx_buf_t *buf;ngx_str_node_t *sn;ngx_conf_dump_t *cd;has…...

QEMU源码全解析 —— 内存虚拟化(23)

接前一篇文章:QEMU源码全解析 —— 内存虚拟化(22) 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM源码解析与应用》 —— 李强,机械工业出版社 QEMU内存管理模型...

【北京迅为】itop-3568 开发板openharmony鸿蒙烧写及测试-第1章 体验OpenHarmony—烧写镜像

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…...

TypeScript 类型声明

在 TypeScript 开发中简化类型声明,可以通过以下 7 种实用技巧 显著提升效率: 一、善用类型推断(30% 场景免声明) // ❌ 冗余写法 const user: { name: string; age: number } { name: Jack, age: 25 };// ✅ 自动推断&#xff…...

从0搭建Tomcat第二天:深入理解Servlet容器与反射机制

在上一篇博客中,我们从0开始搭建了一个简易的Tomcat服务器,并实现了基本的HTTP请求处理。今天,我们将继续深入探讨Tomcat的核心组件之一——Servlet容器,并介绍如何使用反射机制动态加载和管理Servlet。 1. Servlet容器的作用 S…...

【Python】yield函数

【Python】yield函数 1. yield介绍2.yield基本用法3.yield高级用法3.1 yield send() 方法3.2 yield from方法3.3 yield 和yield from叠加处理复杂情况下的叠加 4.yield主要应用场景5.总结 python官方api地址 1. yield介绍 在Python中,yield关键字主要用于生成器函…...

Android13修改多媒体默认音量

干就完了! 设置音量为最大音量,修改如下: /framework/base/media/java/android/media/AudioSystem.java/** hide */public static int[] DEFAULT_STREAM_VOLUME new int[] {4, // STREAM_VOICE_CALL7, // STREAM_SYSTEM5, // STREAM_RING-5, // STREAM_MUSIC15, // STREAM…...

nginx+keepalived负载均衡及高可用

一、环境准备 主机名ip地址备注openEuler-1 192.168.121.11(本机) 192.168.131.11(心跳连接) nginx主负载均衡调度器openEuler-2 192.168.121.12(本机) 192.168.131.12(心跳连接) n…...

SP导入智能材质球

智能材质球路径 ...\Adobe Substance 3D Painter\resources\starter_assets\smart-materials 放入之后就会自动刷新...

Kotlin语言特性(一):空安全、扩展函数与协程

Kotlin语言特性(一):空安全、扩展函数与协程 一、引言 Kotlin作为Android官方推荐的开发语言,相比Java具有诸多现代化特性。本文将重点介绍Kotlin三个最具特色的语言特性:空安全、扩展函数和协程,并结合A…...

Sqlserver安全篇之_启用TLS即配置SQL Server 数据库引擎以加密连接

官方文档 https://learn.microsoft.com/zh-cn/sql/database-engine/configure-windows/configure-sql-server-encryption?viewsql-server-ver16 https://learn.microsoft.com/zh-cn/sql/database-engine/configure-windows/manage-certificates?viewsql-server-ver15&pre…...

Python 爬虫 – BeautifulSoup

Python 爬虫(Web Scraping)是指通过编写 Python 程序从互联网上自动提取信息的过程。 爬虫的基本流程通常包括发送 HTTP 请求获取网页内容、解析网页并提取数据,然后存储数据。 Python 的丰富生态使其成为开发爬虫的热门语言,特…...

【星云 Orbit-STM32F4】07. 用判断数据尾来接收据的串口通用程序框架

【星云 Orbit-STM32F4】用判断数据尾来接收一串数据的串口通用程序框架 摘要 本文介绍了一种基于STM32F407微控制器的串口数据接收通用程序框架。该框架通过判断数据尾来实现一串数据的完整接收,适用于需要可靠数据传输的应用场景。本文从零开始,详细讲…...

授权与认证之jwt(一)创建Jwt工具类

JWT的Token要经过加密才能返回给客户端&#xff0c;包括客户端上传的Tokn,后端项目需要验证核 实。于是我们需要一个WT工具类&#xff0c;用来加密Token和验证Token的有效性。 一、导入依赖 <dependency><groupId>com.auth0</groupId><artifactId>jav…...

Kubernetes Service服务发现dns之CoreDNS

文章目录 背景什么是Service、服务发现、Endpoint什么是CoreDNSCoreDNS 的工作原理 常用命令coredns 运行状态根据服务名&#xff0c;判断某个服务dns解析是否正常 背景 Kubernetes 集群内部的服务发现是微服务架构的核心基础&#xff0c;而 DNS 服务则是实现这一机制的关键组…...

Spring Boot 测试:单元、集成与契约测试全解析

一、Spring Boot 分层测试策略 Spring Boot 应用采用经典的分层架构&#xff0c;不同层级的功能模块对应不同的测试策略&#xff0c;以确保代码质量和系统稳定性。 Spring Boot 分层架构&#xff1a; Spring Boot分层架构 A[客户端] -->|HTTP 请求| B[Controller 层] …...

用友NC系列漏洞检测利用工具

声明&#xff01;本文章所有的工具分享仅仅只是供大家学习交流为主&#xff0c;切勿用于非法用途&#xff0c;如有任何触犯法律的行为&#xff0c;均与本人及团队无关&#xff01;&#xff01;&#xff01; 目录标题 YongYouNcTool启动及适配环境核心功能界面预览一键检测命令执…...

PostgreSQL 创建表格

PostgreSQL 创建表格 在数据库管理中&#xff0c;表格&#xff08;Table&#xff09;是数据存储的基础。PostgreSQL作为一款强大的开源对象关系型数据库管理系统&#xff08;ORDBMS&#xff09;&#xff0c;创建表格是其最基本的功能之一。本文将详细讲解如何在PostgreSQL中创…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...