机器学习--分类

阳性(Positive)和阴性(Negative)

  • 阳性(Positive) = 正类:通常指的是我们关注的类别或事件;
  • 阴性(Negative) = 负类: 指的是与阳性相反的类别或事件。

如果对猫类别感兴趣,那么猫就是正类,而其他事物(例如狗,牛,人类)都是负类。

如果目标是检测/识别行人,那么行人就是正类,而其余的则是负类。

阳性和阴性完全是一个相对的概念,取决于任务中关注的对象。

混淆矩阵(Confusion Matrix)

混淆矩阵 = 可能性矩阵 = 错误矩阵,它是一种用于评估机器学习分类模型表现的工具,它将模型的预测结果分为四类,以预测垃圾邮件为例子:
在这里插入图片描述

真阳性(True Positive, TP):实际为阳性,预测也为阳性。垃圾邮件,模型分类为垃圾邮件
真阴性(True Negative, TN):实际为阴性,预测也为阴性。普通邮件,模型分类为普通邮件
假阳性(False Positive, FP) = 第一类错误(Type I Error) = 误报 :实际为阴性,预测为阳性。普通邮件,模型分类为垃圾邮件。
假阴性(False Negative, FN) = 第二类错误(Type II Error) = 漏报:实际为阳性,预测为阴性。垃圾邮件,模型分类为普通邮件

阈值 Threshold

通过设置阈值,我们可以直接指示模型以何种置信度(Confident Level)来区分正类和负类

假设有一个用于垃圾邮件检测的逻辑回归模型,该模型预测一个介于 0 到 1 之间的值,表示给定电子邮件是垃圾邮件的概率。预测结果为 0.50 表示电子邮件为垃圾邮件的可能性为 50%,预测为 0.75 表示电子邮件为垃圾邮件的可能性为 75%,依此类推。

您想在电子邮件应用中部署此模型,以将垃圾邮件过滤到单独的邮件文件夹中。不过,为此,您需要转换模型的原始数值输出(例如 0.75)分为“垃圾邮件”或“非垃圾邮件”这两类。

如需进行此转换,您需要选择一个阈值概率,称为分类阈值(Classification Threshold)。然后,概率高于阈值的样本会被分配到正类别(即要测试的类,此处为 spam)。概率较低的样本会被分配到负类别(即备选类别,此处为 not spam)。

虽然 0.5 看起来像是一个直观的阈值,但如果一种错误分类的代价高于另一种类型,例如将非常重要的正常邮件错误归类为垃圾邮件(这就是后面会提到的假阳性/第一类错误/误报 ),应显著提高阈值避免误判。

先给结论

  • 降低阈值,会提高真正例、假正例(误报),降低真负例、假负例(漏报);
  • 提高阈值,会提高真负例、假负例(漏报),降低真正例、假正例(误报)
  • 原因显而易见,阈值更高,模型需要更高的信心才会归类为正例,因此不管实际正负,模型预测为正的样本都会变少,而结果是二元化,不预测为正就会预测为负,因此模型预测为负的样本都会变多。

举个例子,假设在数据集中,实际正例和实际负例分别为 50,合计 100
在这里插入图片描述
在这里插入图片描述

当阈值设为 0 时,代表着指示模型,将可能性大于 0 的例子归类为正例,实质就是将所有例子归类为正例
这样做的优点是能找出所有正例,但相对的,会引入很多误报。
以垃圾邮件为例,即虽然能准确找到所有垃圾邮件,但也会把所有普通邮件都当成垃圾邮件误报。
在这里插入图片描述
在这里插入图片描述

当阈值设为 0.53 时,代表着指示模型,将可能性大于 0.53 的例子归类为正例
这样做,我们可以极大减少误报,但相应地也会引入一些漏报。

以垃圾邮件为例,虽然此时有 8 封垃圾邮件没有被正确分类,但至少,有 47 封普通邮件被正确分类,显然,在邮件分类中,我们多看几封垃圾邮件,也不愿意遗漏任何一封普通邮件,因此可以说,0.53 的阈值比 0 的阈值更合理。

在这里插入图片描述
在这里插入图片描述

当阈值设为 0.68 时,代表着指示模型,将可能性大于 0.68 的例子归类为正例
这样做,我们可以将误报完全消除,但相应地引入了大量的漏报。

以垃圾邮件为例,虽然此时所有普通邮件都没有被误伤(FP = 0),但相应的,漏网之鱼垃圾邮件大大增加到 22。

在做深度学习预测分类时,有些任务绝对不能出现漏报,为此就算带来了很多误报,也可以接受;有些任务,可以容忍出现一些漏报,只要将漏报和误报控制在一个较低的水平就可以。

  • 癌症筛查:漏诊癌症(FN)可能导致患者错过最佳治疗时机,危及生命。此时采取的策略应是召回率优先(将阈值降低),即使将许多良性肿瘤误判为恶性(FP),也需确保尽可能检出所有癌症病例。
  • 电商商品推荐:​​误推不相关商品(FP)降低用户体验;漏推潜在喜欢商品(FN)损失部分转化率。此时采取的策略应是平衡精确率和召回率,即将阈值调整到合理地步,类似上面的 0.52 。

数据集不平衡

作为训练模型的一部分,我们希望提供给模型的数据集中,每个类别包含的实际个例数,应当大致相当。如果实际正例的总数与实际负例的总数不接近,则表示数据集不平衡。以预测垃圾邮件为例,数据集中可能数千条普通邮件,而垃圾邮件只有几例。

评价模型的指标

真正例、假正例和假负例是用于计算评估模型的几个实用指标。哪些评估指标最有意义,取决于具体模型和具体任务、不同错误分类的代价,以及数据集是平衡的还是不平衡的。

本部分中的所有指标均基于单个固定阈值计算得出,并且会随阈值的变化而变化。很多时候,用户会调整阈值以优化其中某个指标。

在这里插入图片描述

  • 准确率(Accuracy):准确率用于衡量一个分类模型的效果。它表示模型预测对的次数占总预测次数的百分比。

    • 由于精度包含混淆矩阵中的所有四种结果(TP、FP、TN、FN),因此,在执行通用或未指定任务的通用或未指定模型、数据集平衡、两个类别中的示例数量相近的情况下,精度可以用作衡量模型质量的粗略指标。
    • 例如,模型测试了 100 张图片,其中有 90 张预测正确(TP + TN = 90),那么准确率就是 90%。
    • 对于严重不均衡的数据集(例如普通邮件占比非常低为1%,垃圾邮件占比为 90%),如果我们将阈值调到最高,模型 100% 都预测为负类(普通邮件),则准确率得分为 99%。尽管得分很高,这个模型实质毫无用处
      在这里插入图片描述
  • 精确率(Precision):所有被预测为正类的样本中,实际为正类的比例。
    在这里插入图片描述

  • 召回率(Recall) = 灵敏度(Sensitivity) = 真正例率(TPR):所有实际为正类的样本中,被预测为正类的比例,衡量模型正确识别正类的能力。召回率。

    • 在实际正例数量非常少的不均衡数据集中,召回率作为指标的意义不大。
      在这里插入图片描述
  • 准确率会在一个合适的阈值达到最高;但精确率和召回率通常呈反函数关系,其中一个提高会反过另一个,无法同时提高二者。

  • F1 Score :是精确率和召回率的调和平均数(一种平均值)。该指标在精确率和召回率的重要性之间进行了平衡,对于类别不平衡的数据集,该指标优于准确率。更广泛地说,当精确率和召回率的值接近时,F1 也会接近它们的值。当精确率和召回率相差很大时,F1 将与较差的指标相似。

在这里插入图片描述

  • 假正例率(False Positive Rate, FPR) = 误报概率 :所有实际为负类的样本中,(错误地)被预测为正例的比例。

在这里插入图片描述

  • 特异性(Specificity):所有实际为负类的样本中,(正确地)被预测为负类的比例,衡量模型正确识别负类的能力。特异性 = 真正负类率,
    在这里插入图片描述

例题:构建一个二元分类器,用于检查昆虫捕获器的照片,以确定是否存在危险的入侵物种。在该系统中,误报(假正例)很容易处理:昆虫学家发现照片被错误分类,并将其标记为误报即可。假设准确率水平在可接受的范围内,此模型应该针对哪个指标进行优化?

误报 (FP) 的成本较低,而假负例的成本非常高,因此,最大限度地提高召回率(即检测概率)是明智之举。

ROC 曲线(ROC, Receiver Operating Characteristic Curve)

上一部分介绍了一组模型指标,这些指标均以固定的阈值来计算,一旦更换阈值,每个指标都会变化。

如果想评估所有可能的阈值下模型的表现,则需要 ROC、AUC。

在这里插入图片描述
ROC 曲线是模型在所有阈值上的表现的可视化表示。

ROC 曲线的绘制步骤:

  1. 将 0-1 之间的阈值按照固定间隔分类,例如十等分。
  2. 对于每个阈值,计算对应的 TPR 和 FPR。
  3. 绘制 ROC 曲线:将所有阈值对应的 TPR 和 FPR 绘制在图上,FPR 为 x 轴,TPR 为 y 轴。
  4. 计算 AUC:ROC 曲线下的面积(AUC)表示模型的整体性能。AUC 值越高,模型的分类性能越好。

举个例子,假设有一个医疗检测模型,用于判断患者是否患有某种疾病(正样本)或没有疾病(负样本)。我们将绘制 ROC 曲线来评估模型性能。

  1. 收集预测概率:预测结果可能是每个患者的概率值,比如 [0.1, 0.4, 0.35, 0.8]。
  2. 选择不同阈值:选择阈值 0.2, 0.4, 0.6, 0.8 等。
  3. 计算 TPR 和 FPR:对于阈值 0.2,将所有预测概率大于等于 0.2 的样本标记为正类。计算 TPR 和 FPR。
  4. 重复上述步骤,计算其他阈值下的 TPR 和 FPR。
  5. 绘制 ROC 曲线:在图中,x 轴是 FPR,y 轴是 TPR,绘制 ROC 曲线。
  6. 计算 AUC:计算 ROC 曲线下的面积。AUC 越接近 1,模型性能越好。

曲线下方面积 (Area under the curve,AUC)

曲线下面积的数学意义是,代表模型在随机选择一个正例和一个负例时,将正例的排序高于负例的概率,表示模型在所有可能的阈值下的总体表现。

以垃圾邮件为例子,AUC 为 1.0 的垃圾邮件分类器始终会给随机选取的垃圾邮件赋予比随机选取的正常邮件更高的垃圾邮件概率。

更为人话的说法就是,AUC 越高,表示模型在打分阶段更能准确地区分正例和负例:它通常会给正例更高的得分,给负例更低的得分,从而具备更强的区分能力。

AUC反映了二分类模型对正负样本的区分能力,取值范围从 0 到 1:

  • AUC = 1:模型能够完美地区分所有正样本和负样本。
  • AUC = 0.5:模型的性能相当于随机猜测,没有实际区分能力。
  • AUC < 0.5:模型的预测性能差于随机猜测,通常需要重新训练或调整模型。

在这里插入图片描述

完美模型的 ROC 和 AUC,由于在任何阈值下均不存在误报和漏报,且 TP、TN 均为 1,因此 TPR、FPR 均为恒定常数 1。

随着阈值从1逐步减小到0(或从高到低),模型会“更宽松”地判为正类,导致:

  • TPR 上升(找到了更多正类)
  • FPR 也上升(错判的负类也变多)

标注(Annotation)

标注就是给数据打标签的过程。在机器学习中,标注数据是为了让模型能够学习如何将输入数据映射到正确的输出。标注的过程通常包括以下几个步骤:

  • 选择数据:选择需要标注的数据,例如图片、文本或视频。
  • 添加标签:为每个数据样本添加标签。例如,我们有一组图片,我们会给每张图片加上标签,标明这张图片是“狗”还是“猫”。
  • 检查和验证:确保标注的准确性,以便模型可以学习到正确的信息。

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

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

相关文章

三星MZQL2960HCJR-00BAL高性能固态硬盘控制器SSD云计算和高端存储专用 电子元器件解析

MZQL2960HCJR-00BAL 电子元器件解析 1. 基本类型与功能 MZQL2960HCJR-00BAL 是 三星&#xff08;Samsung&#xff09; 推出的一款 企业级NVMe SSD主控芯片&#xff0c;属于 高性能固态硬盘控制器&#xff0c;专为 数据中心、云计算和高端存储 设计。 关键特性&#xff1a; 接…

Blender——建构、粒子、灯光、动画

Blender是一款开源的三维建模和动画软件&#xff0c;可用于创建3D模型、动画、渲染图像和视频&#xff0c;还支持雕刻、纹理绘制、粒子系统等功能。 建构篇&#xff1a; 基本操作&#xff1a; 视角的控制&#xff1a; 控制观察视角: 鼠标中键 平移视图: Shift鼠标中键 缩放视…

节日快乐啊

<section data-role"paragraph" class"_135editor"> <p> <br/> </p> </section> <p> 玛哈特2025中国国际金属成形展览会邀请函 </p><style>* { margin: 0; …

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…

LeetCode - 387. 字符串中的第一个唯一字符

题目 387. 字符串中的第一个唯一字符 - 力扣&#xff08;LeetCode&#xff09; 思路 用哈希表统计每个字符出现的次数 创建一个 unordered_map<char, int>&#xff0c;遍历字符串&#xff0c;把每个字符出现的次数存进去。 再遍历字符串&#xff0c;找到第一个只出现…

python从环境变量和配置文件中获取配置参数

前言 从环境变量和配置文件中获取配置参数&#xff0c;相关库&#xff1a; python-dotenv&#xff1a;第三方库&#xff0c;需要使用pip安装configparser&#xff1a;标准库 代码 test.ini [mysql] host "192.168.0.10" port 3306 user "root" pas…

HarmonyOS5 运动健康app(一):健康饮食(附代码)

一、核心数据模型设计 代码通过两个接口构建了饮食管理的基础数据结构&#xff1a; interface footItem {name: string; // 营养名称&#xff08;蛋白质/碳水/脂肪&#xff09;weight: number; // 重量&#xff08;克&#xff09; }interface DietItem {name: string; // 食物…

MQ选型及RocketMQ架构总览

一、什么是MQ MQ&#xff08;MessageQueue&#xff09; Message(消息)&#xff1a;消息是在不同进程之间传递的数据&#xff0c;这些进程可以在同一台机器上&#xff0c;也可以在不同的机器上。 Queue&#xff08;队列&#xff09;&#xff1a;队列原意是指一种具有FIFO&#…

python与java的区别

java老程序员来学习python了&#xff0c;记录一下两种类型语言的区别&#xff1a; Python与Java变量类型对比 python里面定义变量不需要指定变量的数据类型&#xff0c;并且是可以修改成其他类型java里面定义变量要指定变量的数据类型&#xff0c;指定以后不可以修改成其他数据…

固件签名技术深度解析:HSM模块如何守护设备安全,CAS系统如何赋能产业升级

引言&#xff1a;数字时代的固件安全危机 在万物互联的今天&#xff0c;全球设备固件安全事件频发&#xff1a;某汽车品牌因固件漏洞导致百万车辆被远程控制&#xff0c;某医疗设备厂商因固件篡改引发数据泄露&#xff0c;某工业控制系统因非法固件升级造成生产线瘫痪……这些…

修改Typora快捷键

代码 的默认快捷键为&#xff1a; 这对我来说不太友好&#xff0c;太难按了&#xff0c;而且我电脑右边的Ctrl键坏了&#xff0c;这意味着我只能一个左手去按这3个键的组合&#xff0c;这更是难上加难了&#xff0c;于是想到改一下快捷键&#xff0c;代码块 是Ctrl Shift K&…

Bellman-Ford算法(详解版)

Bellman-Ford算法 Bellman-Ford算法是用来解决,对于有负权的图的**单源最短路径**.因为DJ算法不可以解决对于负权的图,所以使用这个算法来求解.但是依旧不可以有负回路.因为负回路就没有存在单源最短路径这一说. BF的另一个重要的用途就是用来检测**是不是存在负回路** 思路…

《HarmonyOSNext的ForEach数组渲染の核心玩法与避坑指南》

《HarmonyOSNext教学宝典&#xff1a;ForEach数组渲染全攻略与性能优化》 #HarmonyOS开发 #ArkTS实战 #组件解析 &#x1f3af; ForEach组件完全指南&#xff1a;数组循环渲染核心机制 举个栗子&#x1f330;&#xff1a; ForEach相当于智能印刷机&#xff0c;将数组元素自动转…

单片机 - STM32F407 ADC 模式详解:单次转换、连续转换、扫描模式、非扫描模式

STM32F407 ADC 模式详解&#xff1a;单次转换、连续转换、扫描模式、非扫描模式 前言 在 STM32F407 中&#xff0c;ADC&#xff08;模数转换器&#xff09;模块常用于采集模拟信号&#xff0c;比如读取光敏电阻、电压、电流、温度传感器等。STM32 的 ADC 模式较多&#xff0c…

开源模型应用落地-工具使用篇-从零开始搭建Qdrant Web UI-可视化管理工具-Windows(十)

一、前言 Qdrant 是一个高性能的向量搜索引擎&#xff0c;广泛应用于相似性搜索、推荐系统和大规模数据检索等场景。虽然其原生 API 提供了强大的功能&#xff0c;但对于开发者和运维人员来说&#xff0c;缺乏直观的可视化界面常常增加了使用门槛。为了解决这一问题&#xff0c…

高频交易技术:订单簿分析与低延迟架构——从Level 2数据挖掘到FPGA硬件加速的全链路解决方案

高频交易技术&#xff1a;订单簿分析与低延迟架构——从Level 2数据挖掘到FPGA硬件加速的全链路解决方案 一、引言&#xff1a;高频交易的技术本质 1.1 速度即利润的微观战场 数据揭示&#xff1a;据NYSE实测&#xff0c;每降低1微秒延迟可获得年化$700-1500万套利窗口&#…

基于生成对抗网络(GAN)的图像生成与编辑:原理、应用与实践

前言 生成对抗网络&#xff08;GAN&#xff09;是近年来深度学习领域中最具影响力的技术之一。自2014年由Ian Goodfellow等人首次提出以来&#xff0c;GAN已经在图像生成、图像编辑、风格转换等多个领域取得了令人瞩目的成果。GAN的核心思想是通过生成器&#xff08;Generator&…

pytorch基本运算-梯度运算:requires_grad_(True)和backward()

引言 前序学习进程中&#xff0c;已经对pytorch基本运算中的求导进行了基础讨论&#xff0c;相关文章链接为&#xff1a; 导数运算pytorch基本运算-导数和f-string-CSDN博客 实际上&#xff0c;求导是微分的进一步计算&#xff0c;要想求导的前一步其实是计算微分&#xff1…

idea64.exe.vmoptions配置

这个idea64.exe.vmoptions文件是用于配置 IntelliJ IDEA&#xff08;64位版本&#xff09;运行时的 Java 虚拟机&#xff08;JVM&#xff09;参数。这些参数直接影响到 IDEA 的性能、内存使用、调试能力和行为。 下面是对文件中每一行配置的详细解读&#xff1a; -Xms2048m 作…

齐次变换矩阵相乘的复合变换:左乘与右乘的深度解析

在三维几何变换中,齐次变换矩阵相乘是实现复杂变换的核心方法。本文将通过一个包含四个变换步骤的完整示例,深入探讨齐次变换矩阵左乘和右乘的区别,并结合 Python sympy 库的代码实现,详细阐述变换过程和结果差异。 二维齐次坐标的旋转变换 在二维齐次坐标系中,一个点可以…