机器学习策略Ⅰ
机器学习策略Ⅰ
-
在构建一个好的监督学习系统时,通常需要确保以下四个方面:
- 系统需要在训练集上能够很好地拟合数据,达到某种可接受的性能水平(如接近人类水平)。如果训练集表现不好,可以使用更大的模型(深度神经网络)、改进优化算法(Adam)、增加训练时间或数据量。
- 系统还需要在验证集上表现良好,避免过拟合。如果验证集表现不好,可以添加正则化(L2正则化、Dopout)、增加训练数据量、数据增强或改进特征工程。
- 系统在测试集上的表现应该接近验证集,避免在测试数据上过拟合或欠拟合。如果测试集表现不好,可以使用更大的验证集,确保验证数据分布与测试数据一致,以及检查数据是否存在数据泄露或分布差异。
- 系统在实际应用中的表现要好。系统在测试集上的表现不错,但在实际应用中效果不佳时,可能是成本函数或开发集分布有问题。如果实际应用表现不好,可以修改成本函数,使其更贴合实际需求,或者重新设计验证集,使其更接近真实分布。
-
正交化是指设计系统时,使每个调整项只影响一个性质,互相之间尽量不干扰。比如电视的设计中,一个旋钮只能调整图像高度,一个旋钮只能调整图像宽度,一个旋钮只能调整图像旋转角度等。如果一个旋钮同时影响多个性质(如高度、宽度、梯形角度等),调节起来会非常困难。
在机器学习系统中,要尽量避免一个“旋钮”同时影响多个性质。Early Stopping(早停法)是一种常用技术,但它同时影响训练集拟合和验证集表现,因此不够正交化。为了更清晰地分析问题,可以使用其他更正交化的手段(如正则化、优化算法等)。
-
在构建机器学习项目时,无论是调整超参数,还是尝试不同的学习算法,都需要设置一个单一数字评估指标,可以帮助快速判断新尝试的手段是否比之前的更好,从而加速迭代和优化的过程。
对于分类问题,**准确率(Precision)**指在分类器预测为真的数据中有多少标签实际为真,**召回率(Recall)**指在所有标签为真的数据中有多少被预测为真。虽然查准率和查全率是非常重要的指标,但它们往往需要在两者之间进行权衡。例如,一个分类器可能在查准率上表现更好,而另一个在查全率上表现更好。在这种情况下,单独依赖这两个指标难以快速判断哪个分类器更优。因此需要找到一个能结合准确率和召回率的新的数字评估指标,即 F 1 F_1 F1 分数,代表两个指标的调和平均数。
F 1 = Pecision × Recall Pecision + Recall F_1=\frac{\text{Pecision} \times \text{Recall}}{\text{Pecision}+\text{Recall}} F1=Pecision+RecallPecision×Recall
除了 F 1 F_1 F1 分数外,还可以采用平均错误率等作为单一数字评估指标。
-
在训练模型时通常需要同时考虑多个评估指标,主要可以分为两类:优化指标和满足指标。
优化指标是希望尽可能优化和提升的指标,它是我们主要关注的目标,需要不断迭代改善,如准确率和召回率。
满足指标是我们希望达到某个最低要求的指标。一旦满足了这个要求,我们不再关心它是否进一步优化。例如只要运行时间小于某个阈值(如 100 毫秒),我们就认为它达标,之后的优化(如从 80 毫秒减少到 50 毫秒)并不重要。
如果需要考虑 n n n 个指标,可以先选择一个优化指标,尽可能去优化。然后设定 n − 1 n-1 n−1 个满足指标,为这些指标设定最低要求。
-
必须保证训练集、验证集、测试集来自同一分布。在数据较少的时候,传统经验法则是采用训练集和测试集70%、30%的比例,或者训练集、验证集、测试集60%、20%、20%的比例。这种划分在早期的数据集规模较小时非常合理,然而在现代大规模数据集中,如数百万样本,更合理的训练集、验证集、测试集比例就变成了98%、1%、1%。
测试集的主要目的是在模型训练完成后,用于评估系统的最终性能。测试集需要足够大,以高置信度评估系统的整体性能。通常,一万样本就足够了,具体数量取决于数据总量和应用场景。
在某些情况下,可以只划分训练集和验证集,而不设立单独的测试集。例如验证集非常大,过拟合的风险较低。但是在实践中,缺少单独测试集可能会导致模型性能评估存在偏差,因为验证集可能会被多次使用,导致模型在验证集上的表现被过度优化。因此,通常建议保留一个独立的测试集,作为最终性能评估的基准。
-
当现有的评估指标无法正确衡量算法的优劣时,需要修改指标。
第一种是开发集/测试集分布与实际应用场景不匹配,比如开发集使用高质量图片,但实际应用中处理的是低质量、模糊的图片,此时需要调整开发集和测试集的分布,使其更贴近实际应用。
第二种是指标与实际需求不符合,比如猫分类器中,简单的分类错误率无法反映用户对色情图片的敏感性,因此需要改进加权分类错误率。
原始分类错误率可以表示为:
E r r o r = 1 m d e v ∑ i = 1 m d e v I { y p r e d ( i ) ≠ y ( i ) } Error = \frac{1}{m_{{dev}}}\sum_{i = 1}^{m_{{dev}}}{I\{ y_{{pred}}^{(i)} \neq y^{(i)}\}} Error=mdev1i=1∑mdevI{ypred(i)=y(i)}
其中, m d e v m_{dev} mdev 表示验证集样本数, y p r e d ( i ) y_{pred}^{(i)} ypred(i) 表示预测值0/1, I I I 表示统计满足表达式为真的样本数量。但是这个评估指标问题在于,对色情图片和非色情图片一视同仁了。
加权分类错误率可以改善这个问题:
E r r o r = 1 m d e v ∑ i = 1 m d e v w ( i ) I { y p r e d ( i ) ≠ y ( i ) } Error = \frac{1}{m_{{dev}}}\sum_{i = 1}^{m_{{dev}}}{w^{(i)}I\{ y_{{pred}}^{(i)} \neq y^{(i)}\}} Error=mdev1i=1∑mdevw(i)I{ypred(i)=y(i)}
如果图片 x ( i ) x^{(i)} x(i) 不是色情图片,则 w ( i ) = 1 w^{\left( i \right)} = 1 w(i)=1 。如果 x ( i ) x^{(i)} x(i) 是色情图片, w ( i ) w^{(i)} w(i) 可能就是10甚至100,赋予了色情图片更大的权重,让算法将色情图分类为猫图时,错误率会急剧变大。
如果评估指标无法正确评估算法的效果,那么就需要定义一个新的评估指标。加权法只是定义评估指标的一种可能方式。即使无法一开始就定义完美的评估指标和数据集,也应快速设立初步的指标和数据集,推动迭代速度。如果在后续过程中发现评估指标和数据集不够理想,可以随时进行调整。
-
贝叶斯最优错误率是从输入 x x x 到输出 y y y 之间映射的理论最优函数。由于数据中存在噪声或模糊性,某些任务的贝叶斯最优准确率可能不是100%。对于许多任务(如图像识别、语音识别),人类的表现已经非常接近贝叶斯最优错误率,因此改进空间有限。
机器学习算法在许多应用领域的性能已经接近甚至超越人类水平。通过与人类表现比较,可以帮助优化机器学习系统的设计和效率。当算法性能低于人类时,可以使用以下策略提升性能:- 标注更多数据:让人类标记数据,增加训练样本。
- 错误分析:让人类分析算法的错误,找出改进方向。
- 偏差/方差分析:人类表现作为基准,帮助判断应优先减少偏差还是方差。
当算法的性能低于人类水平时,通过利用这些工具,改进速度通常较快。当算法超越人类水平后,性能提升的速度会显著减慢。性能最终会接近理论上的最优错误率(贝叶斯最优错误率),但无法超越。
-
在许多任务(如计算机视觉)中,人类的表现接近贝叶斯错误率,因此可以用人类水平错误率作为贝叶斯错误率的近似值。
可避免偏差衡量的是模型训练错误率与贝叶斯错误率的差距,表示模型在训练集上的改进空间。方差衡量的是训练错误率与验证错误率之间的差距,表示模型的泛化能力还有多少提升空间。
如果人类水平错误率是1%,训练错误率是8%,验证错误率是10%。那么可避免偏差是7%,方差为2%,显然要专注于减少偏差。
如果人类水平错误率是7.5%,训练错误率是8%,验证错误率是10%。那么可避免偏差是0.5%,方差为2%,显然要专注于减少方差。
-
在医学影像识别上,人类水平错误率可以是普通人类的表现(3%),也可以是普通医生的表现(1%),也可以是经验丰富医生的表现(0.7%),甚至可以是经验丰富的医生团队的表现(0.5%)。
如果目标是估计贝叶斯错误率,那么需要选择最优医生团队的表现。
如果目标是评估系统是否具有实用价值,选择普通医生的表现即可。
当偏差远离人类水平时,偏差和方差问题较为明显,容易判断优化方向。
当偏差接近人类水平时,偏差和方差问题变得难以区分,需要更准确地估计贝叶斯错误率以指导优化方向。
-
当机器学习接近或超越人类水平时,难以准确估计贝叶斯错误率,进而难以判断是否应该专注于减少偏差还是减少方差,不确定性大大增加。依赖人类直觉和现有分析工具来指导优化方向也会变得更加困难。
在结构化数据的领域,如广告推荐、物流预测等,模型可以访问比人类更多的数据,更敏锐地识别统计规律。人类在这些领域的表现有限,因此机器更容易超越人类。
而在自然感知任务中,如语音识别、计算机视觉、医疗诊断等,人类在这些任务中表现极佳,计算机超越人类更具挑战性。
相关文章:
机器学习策略Ⅰ
机器学习策略Ⅰ 在构建一个好的监督学习系统时,通常需要确保以下四个方面: 系统需要在训练集上能够很好地拟合数据,达到某种可接受的性能水平(如接近人类水平)。如果训练集表现不好,可以使用更大的模型&…...
redis中的bigkey及读取优化
一、bigKey介绍 1、简介 在 Redis 中,Big Key(大键)指的是占用大量内存的单个键。通常,Redis 是一个高性能的内存数据库,但是当某些键变得非常大时,会带来性能上的影响。例如,大量的内存消耗、长时间的操作延迟,甚至可能导致 Redis 停止响应或崩溃。 通俗的来说,指…...
【西瓜书】支持向量机(SVM)
支持向量机(Support Vector Machine,简称SVM)。 超平面 分类学习最基本的想法就是基于训练集合D在样本空间中找到一个划分超平面,将不同类别的样本分开。 但能将训练样本分开的划分超平面可能有很多,应该努力去找到哪…...
三维渲染中顺序无关的半透明混合(OIT)(二——Stencil Route)
1、A-Buffer算法。 在谈到Stencil Route之前,需要先讨论A-Buffer算法。A-Buffer是一种图形学(渲染方向)上的用于可见面分析(Visble Surface Detection)的技术,是Z-Buffer的衍生方法。 Z-Buffer是用于剔除 不透明 物体的算法。假…...
(SAST检测规则-3)固定的 SessionID 缺陷详解
漏洞类型: 会话固定攻击(Session Fixation Attack) 漏洞描述: 会话固定攻击是利用服务器的会话管理机制存在漏洞,攻击者通过提前控制或预测用户的会话标识符(Session ID),当用户登录…...
【安卓开发】【Android Studio】项目构建(Build)时报错:Integer Overflow
一、问题描述 在安卓项目中,构建(Build)失败并报错:xxxxx Integer Overflow(整型溢出)。 二、相关代码 刚开始以为是某个整数(例如控件、java类)不匹配造成的,检查如下…...
STM32主要功能
STM32 是由意法半导体(STMicroelectronics)推出的一系列基于 ARM Cortex-M 内核的微控制器(MCU)。STM32 微控制器广泛应用于嵌入式系统中,因其高性能、低功耗、丰富的外设接口和多种封装形式而被广泛采用。其主要功能和…...
MacOS 如何连接 Linux NFS 服务器
以 Ubuntu 为例。 Ubuntu 服务器端设置 1. 进入 root 权限,安装 NFS 服务: apt-get update apt-get install nfs-kernel-server2. 创建共享目录: mkdir /data chown nobody:nogroup /data chmod 777 /data3. 配置 /etc/exports 文件: vi …...
【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,2-39
文件下载与邀请翻译者 学习英特尔开发手册,最好手里这个手册文件。原版是PDF文件。点击下方链接了解下载方法。 讲解下载英特尔开发手册的文章 翻译英特尔开发手册,会是一件耗时费力的工作。如果有愿意和我一起来做这件事的,那么ÿ…...
摄影相关常用名词
本文介绍与摄影相关的常用名词。 曝光 Exposure 感光元件接收光线的过程,决定图像的明暗程度和细节表现。 光圈 Aperture 控制镜头进光量的孔径大小,用 F 值(f-stop) 表示。 光圈越大(F 值越小),…...
02.06、回文链表
02.06、[简单] 回文链表 1、题目描述 编写一个函数,检查输入的链表是否是回文的。 2、解题思路: 快慢指针找中点: 利用快慢指针的技巧来找到链表的中间节点。慢指针 slow 每次移动一步,而快指针 fast 每次移动两步。这样&…...
Shell脚本小练习
学习了这么长时间Shell脚本,总得来一次小小的练习吧,那么请看下文! 1.用Shell写一个小计算器。 通过read命令获取用户输入的表达式,表达式的格式设定为操作数1 运算符 操作数2,例如53,然后利用设计的脚本…...
四轮转向轮式里程计设计(python)
目录 写在前面的话参考教程官方教程参考代码(c) 关键代码解析订阅车轮速度订阅车轮转向订阅四轮转向控制模式积累速度和转向角发布里程计 完整代码完整视频演示 写在前面的话 上一篇博客:键盘控制车子四轮转向 这篇文章通过订阅车轮的速度和…...
多方法做配对样本t检验(三)
Wilcoxon符号秩检验 Wilcoxon符号秩检验(Wilcoxon Signed-Rank Test) 是一种非参数统计方法,用于检验两组相关样本(配对样本)之间的差异是否显著。它通常用来代替配对样本t检验,特别是在数据不符合正态分布…...
Vue 将推出「无虚拟DOM」版本,又是新的前端框架趋势?
文章目录 背景无虚拟DOM版的Vue3Vue Vapor 在线演练题外话:渲染流程 背景 随着 React 和 Vue 这些前端框架的爆火,他们的渲染方式,虚拟DOM,也跟着火了起来,大家都认为这是一种高性能批量更新DOM的方式但是近一两年有不…...
阿里云ECS服务器磁盘空间不足的几个文件
查看磁盘空间命令: df -h /mnt 清零 echo >nohup.out 磁盘空间不足的文件列表: 一、nohup.out:来自"nohup java -jar service.jar &"命令产生的文件,位置在服务jar所在目录 二、access.log:位于…...
从0开始linux(38)——线程(1)线程概念
欢迎来到博主专栏:从0开始linux 博主ID:代码小豪 文章目录 进程与线程线程概念线程的优点线程的独立数据 进程与线程 如果要理解线程,那么进程将会时绕不开的点。首先我们回顾一下我们之前在进程章节当中是如何描述进程的? 进程&…...
Ubuntu源码安装gitlab13.7集群多前端《二》
Ubuntu源码安装gitlab13.7《一》 gitaly需要调整的服务 redis socket->ipbind ....* # 0.0.0.0pg vim /etc/postgresql/14/main/pg_hba.confhost all all ..../32 md5gitaly vim /home/git/gitaly/config.tomlbin_dir "/home/gi…...
身份证OCR 识别 API 接口的发展前景
随着信息时代的到来,大量的身份证数据需要进行整理、存储和管理,OCR 识别技术可以将身份证信息转化为结构化的电子文本,方便后续的数据管理和分析,提高工作效率。 未来,随着人工智能和深度学习等技术的不断发展&#…...
Spring boot之BeanDefinition介绍
在spring框架中IOC容器进行bean的创建和管理。Bean的创建是一个比较复杂的过程,它并不像我们创建对象一样只是直接new一下就行,虽然有些bean确实就是New一下。但在Spring中可以通过一些途径对bean进行增强扩展。在这个过程中,BeanDefinition作…...
30分钟学会正则表达式
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。 作用 匹配 查看一个字符串是否符合正则表达式的语法 搜索 正…...
Python 自动化办公的 10 大脚本
大家好,我是你们的 Python 讲师!今天我们将讨论 10 个实用的 Python 自动化办公脚本。这些脚本可以帮助你简化日常工作,提高效率。无论是处理 Excel 文件、发送邮件,还是自动化网页操作,Python 都能派上用场。 1. 批量…...
Python蒙特卡罗MCMC:优化Metropolis-Hastings采样策略Fisher矩阵计算参数推断应用—模拟与真实数据...
全文链接:https://tecdat.cn/?p38397 本文介绍了其在过去几年中的最新开发成果,特别阐述了两种有助于提升 Metropolis - Hastings 采样性能的新要素:跳跃因子的自适应算法以及逆 Fisher 矩阵的计算,该逆 Fisher 矩阵可用作提议密…...
成绩排序
成绩排序 C语言代码C 代码Java代码Python代码 💐The Begin💐点点关注,收藏不迷路💐 给出班里某门课程的成绩单,请你按成绩从高到低对成绩单排序输出,如果有相同分数则名字字典序小的在前。 输入 第一行为…...
MySQL底层概述—7.优化原则及慢查询
大纲 1.Explain概述 2.Explain详解 3.索引优化数据准备 4.索引优化原则详解 5.慢查询设置与测试 6.慢查询SQL优化思路 1.Explain概述 使用Explain关键字可以模拟查询优化器来执行SQL查询语句,从而知道MySQL是如何处理SQL语句的,从而分析出查询语句…...
R““有什么作用在C++中,举例说明
在C中,R""(双引号前加R)表示一个原始字符串字面量(Raw String Literal),其主要作用是让字符串中的反斜杠\和其他特殊字符不被当作转义字符处理,而是保留其原始字面意义。这在处理包含…...
linux中top 命令返回数据解释
当您在 Linux 终端中运行 top 命令时,它会显示一个动态更新的系统状态视图,其中包括许多有关系统性能的数据。下面是对 top 命令返回数据的详细解释: 标题栏 top - 22:46:12 up 2 days, 3:14, 1 user, load average: 0.05, 0.07, 0.09 22:46:12:当前时间。up 2 days, 3:14…...
深入理解二叉树及其变体:平衡二叉树、红黑树、B-树和B+树
一、二叉树简介 二叉树是一种非常常见的数据结构,它具有以下特点: 每个节点最多有两个子节点,分别称为左子节点和右子节点。每个节点的左子树和右子树都是二叉树。 二叉树的常见操作包括:创建、插入、删除、查找、遍历等。下面…...
C++ 编程技巧之StrongType(1)
最近看到一个NamedType的开源库,被里面的Strong Type这个概念和里面的模版实现给秀了一脸,特此总结学习一下 GitHub - joboccara/NamedType: Implementation of strong types in C C本身是一种强类型语言,类型包括int、double等这些build i…...
芯片测试-smith圆图
smith圆图 💢smith圆图的故事💢💢smith圆图中的各部分来历💢💢公式推导💢💢等电阻圆特点💢💢等电抗圆💢💢等电抗圆特点💢 Ὂ…...
南宁市保障住房建设管理服务中心网站/360站长工具seo
1 异常 异常:Java代码在运行时期发生的问题就是异常。 1.1 异常的继承体系 Throwable:是所有错误和异常的超类。 Error:错误类。 Exception:编译期异常,进行编译Java程序时出现的问题。 RuntimeException…...
网站开发的测试/爱廷玖达泊西汀
今天,看到一篇文章,蛮有趣的,文章的作者也是我一直有关注的,目前主要从事算法视频制作。他看到一个贪吃蛇游戏,当然也不仅仅是简单的贪吃蛇游戏,重点是这个贪吃蛇把食物吃完后,刚好布满了全屏。…...
电子商务网站建设与维护教案/seo技术培训唐山
虽然NI LabVIEW软件长期以来一直帮助工程师和科学家们快速开发功能测量和控制应用,但不是所有的新用户都会遵循LabVIEW编程的最佳方法。LabVIEW图形化编程比较独特,因为只需看一眼用户的应用程序,就马上可以发现用户是否遵循编码的最佳方法。…...
简易做海报网站/软件培训机构有哪些?哪个比较好
中间人攻击(Man-in-the-Middle (MITM) attack) 中间人攻击是一种常见的攻击手段,攻击者与通信双方分别建立连接,将双方想要交换的数据进行记录、篡改甚至丢弃。由于Http是明文传输,因此很容易遭受到中间人攻击。 一个通俗的例子 假设 Tom 想和…...
wordpress备份百度云/有哪些网站可以免费发布广告
便快是一种通便药,主要适用于治疗便秘。 它的主要成分是通便剂,如泻药或植物性通便剂,如海藻糖或鼠尾草碱。此外,便快中还可能含有其他成分,如阿斯匹林、消炎药或抗生素,以帮助治疗其他相关的肠道问题。请注…...
最新网球赛事新闻/谷歌seo搜索引擎优化
author YHC 主题允许你改变视觉效果,许多扩展主题的创建基于jQuery UI主题,没有任何官方发布的部分,你也可以创建一个已存在主题的子主题. Sunny Pepper Grinder Cupertino Dark Hive 下载 EasyUI 扩展示例代码: jquery-easyui-themes.zip...