【理解机器学习算法】之分类问题的模型评估(ROC-AUC)

ROC曲线(接收者操作特性曲线)和AUC(曲线下面积)是在不同阈值设置下,用于分类问题的性能度量工具。下面是它们所代表的含义以及使用方法:

ROC曲线

  • 代表含义:ROC曲线是一个图形化的表示,说明了一个二分类器系统的诊断能力,随着其区分阈值的变化。它是通过在不同的阈值设置下,绘制真正例率(TPR,也称为召回率或灵敏度)与假正例率(FPR,或1 - 特异性)来创建的。
  • 如何解读:曲线从(0,0)开始,到(1,1)结束。一个做出随机猜测的模型将会产生一条从图表左下角到右上角的对角线(无区分能力线)。曲线越远离这条对角线,模型的性能越好。

AUC - ROC曲线下面积

  • 代表含义:AUC衡量的是整个ROC曲线下(从(0,0)到(1,1))的二维区域面积。它提供了一个在所有分类阈值上的综合性能度量。一个预测完全错误的模型有一个0.0的AUC;一个预测完全正确的模型的AUC为1.0。
  • 如何解读:AUC可以被解释为模型对一个随机正例排名高于一个随机负例的概率。0.5的AUC表明没有区分能力(相当于随机猜测),接近1的AUC表示模型很好地将正例排名高于负例。

AUC 解释为排名概率

  • 把AUC想象成一个游戏,我们随机地从数据集中选取一个正例和一个负例。
  • 然后我们让模型对这两个实例进行评分,预测它们是正例的概率。
  • 如果模型通常能给正例更高的分数,这就意味着模型能很好地区分正例和负例。
  • AUC值是模型在这个游戏中赢得每次比赛(即正例得分高于负例)的概率。

注:在二分类问题中,数据集被分成两类,通常一类是我们关注的目标,另一类则不是。这两类分别被称为“正例”和“负例”:

  • 正例(Positive Case):通常指的是我们试图检测或预测的类别。例如,在疾病诊断中,正例可能指的是患有某种疾病的病例;在垃圾邮件检测中,正例可能指的是垃圾邮件。

  • 负例(Negative Case):与正例相对,负例通常指的是除了正例之外的其它类别。在前面疾病诊断的例子中,负例可能指的是没有患病的健康病例;在垃圾邮件检测的例子中,负例可能指的是正常邮件。

在不同的应用场景中,哪些是正例哪些是负例,取决于问题的具体定义和研究的目的。正例和负例的概念有助于在建立模型时提供清晰的指导,以及在评估模型性能时,特别是计算诸如准确率、召回率、精确率这样的指标时,能够有明确的评判标准。

ROC曲线上的要点:

  • x轴代表假正例率(FPR),y轴代表真正例率(TPR)。
  • 蓝色虚线代表完全随机分类器的ROC曲线(AUC为0.5);它是衡量分类器的基准线。
  • 橙色曲线代表逻辑回归分类器的ROC曲线。它展示了灵敏度和特异性之间的权衡(即真正例和假正例之间的权衡)。
  • AUC(曲线下面积)值为0.92,接近于1,表示模型具有良好的可分性。AUC越接近1,模型在将0预测为0和1预测为1方面就越好。
  • 完美的分类器将有一条线从左下角(0假正例)到左上角(100%真正例),然后到右上角(100%真正例在100%假正例时)。

ROC-AUC得分是一个单一的标量值,总结了分类器在所有阈值下的性能,这使得它在需要评估和比较分类器时非常方便。

从图中我们可以得出结论,分类器的表现明显优于随机猜测,因为曲线更接近左上角。这使得它成为一个可能的好模型,用于它被设计的预测任务。

图表上的阈值:

  • 在图表上,每个点对应一个特定的阈值设置。当你沿着ROC曲线移动时,这个阈值是变化的,每个点代表了在特定阈值下模型的TPR和FPR。
  • 例如,如果一个点位于曲线的右上角,它可能对应一个较低的阈值,此时有高真正例率和高假正例率。
  • 如果一个点位于曲线的左上角,它可能对应一个较高的阈值,此时有高真正例率和低假正例率。

根据具体情况,我们可能会调整阈值。例如,如果我们非常重视避免误判负例为正例(即希望降低FPR),我们可能会选择一个更高的阈值,即使这会降低TPR。相反,如果我们更希望不漏掉任何正例(即希望提高TPR),我们可能会选择一个更低的阈值,即使这意味着更高的FPR。

为什么ROC-AUC很有价值:

  • 阈值不变性:ROC-AUC之所以有价值,是因为它评估了模型在所有分类阈值下的性能,提供了一个不依赖于特定截断点的质量度量。
  • 分类不平衡问题:它在类别不平衡的情况下特别有用,因为它同时考虑了假正例率和真正例率。在类别不平衡的数据中,诸如准确率这样的指标可能会产生误导,但AUC提供了一个更细致、更全面的度量。
  • 模型比较:AUC指标允许我们比较不同模型,并决定哪个模型在区分类别方面可能更好。

在实践中,为了计算ROC-AUC,你通常会使用一个工具或库函数,该函数接收真实结果和正类的预测概率,计算不同阈值下的TPR和FPR,然后对曲线进行积分以找到AUC。在Python中,这个功能由像`scikit-learn`这样的库提供。

from sklearn.metrics import roc_curve, auc
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression

# Create a synthetic binary classification dataset
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)

# Split the data into training and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Train a logistic regression classifier
clf = LogisticRegression(random_state=42)
clf.fit(X_train, y_train)

# Predict probabilities for the test set
y_scores = clf.predict_proba(X_test)[:, 1]

# Compute ROC curve and ROC area
fpr, tpr, _ = roc_curve(y_test, y_scores)
roc_auc = auc(fpr, tpr)

# Plotting the ROC curve
plt.figure(figsize=(10, 8))
plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate (1 - Specificity)')
plt.ylabel('True Positive Rate (Sensitivity)')
plt.title('Receiver Operating Characteristic (ROC) Curve')
plt.legend(loc="lower right")
plt.show()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

反射 Reflection

反射 反射的概念 反射机制允许程序在执行期借助于ReflectionAPI取得任何类的内部信息(比如成员变量,构造器,成员方法等等),并能操作对象的属性及方法。反射在设计模式和框架底层都会用到加载完类之后,在堆中就产生了一个Class类型…

SurfaceFlinger实战dump获取单个Layer图像方案学员改进成果

背景: hi,粉丝朋友们: 在马哥课程的实战实现dump单个图层的发布后,很多学员朋友就纷纷享马哥要了相关源码,相关的链接请参考这里: https://blog.csdn.net/learnframework/article/details/136323076 学员…

前端项目,个人笔记(三)【Vue-cli - api封装-axios使用举例】

目录 前言 1、axios配置与测试 1.1、配置 1.2、测试 2、使用axios案例-渲染header 3、Pinia优化重复请求 3.1、为什么? 3.2、使用Pinia优化代码步骤 步骤一:在main.js中创建 Pinia 实例,并将其作为插件添加到 Vue 应用中 步骤二&am…

【QT+QGIS跨平台编译】之八十四:【QGIS_Gui跨平台编译】—【错误处理:未实例化QgsMapLayer - QgsHighlight】

文章目录 一、未实例化QgsMapLayer二、错误处理 一、未实例化QgsMapLayer 报错信息: 二、错误处理 第31行修改为: #include "qgsmaplayer.h"

【Leetcode】2684. 矩阵中移动的最大次数

文章目录 题目思路代码结果 题目 题目链接🔗 给你一个下标从 0 开始、大小为 m x n 的矩阵 grid ,矩阵由若干 正 整数组成。 你可以从矩阵第一列中的 任一 单元格出发,按以下方式遍历 grid : 从单元格 (row, col) 可以移动到 (…

Flutter-仿携程首页类型切换

效果 唠叨 闲来无事,不小心下载了携程app,还幻想可以去旅游一番,奈何自己运气不好,自从高考时第一次吹空调导致自己拉肚子考试,物理,数学考了一半就交卷,英语2B铅笔除了问题,导致原…

MySQL数据库的基本概念与安装

目录 引言 一、数据库的基本概念 (一)数据、表与数据库 1.数据(Data) 2.表 3.数据库 (二)数据库管理系统 (三)数据库系统 二、数据库的发展 三、主流数据库的介绍 (一)关…

一命通关深度优先遍历

前言 在解释深度优先遍历之前,我想先让大家去思考一个可能从未想过的问题: 为什么我们在学习基础数据结构的时候,都没有出现dfs和bfs这两个词,而在学习二叉树和图的时候,突然蹦出了深度优先遍历和广度优先遍历这两个…

力扣 第 126 场双周赛 解题报告 | 珂学家 | 贡献法思维场 + 贪心构造 + 0-1背包

前言 整体评价 T3是道好题,一开始思路偏了往按字母前缀和和DP去想了,但是感觉很难下手,后来发现从贡献的角度,其实和位子无关系,只需要贪心即可。 T4也是一道贡献思路题,理清核心的点,就能简单…

Vue项目使用process.env关键字及Vue.config.js配置解决前端跨域问题

1.process.env 是Node.js 中的一个环境 1.打开命令行查看环境: 2.process.env与Vue CLI 项目 Vue Cli 有以下三种运行模式 development 模式用于 vue-cli-service serve test 模式用于 vue-cli-service test:unit production 模式用于 vue-cli-service build 和 vue-cli-se…

每日一练:LeeCode-167. 两数之和 II - 输入有序数组【双指针】

给你一个下标从 1 开始的整数数组 numbers &#xff0c;该数组已按 非递减顺序排列 &#xff0c;请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] &#xff0c;则 1 < index1 < index2 < numbers.…

如何本地部署1Panel面板

文章目录 前言1. Linux 安装1Panel2. 安装cpolar内网穿透3. 配置1Panel公网访问地址4. 公网远程访问1Panel管理界面5. 固定1Panel公网地址 前言 1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。高效管理,通过 Web 端轻松管理 Linux 服务器&#xff0c;包括主机监控、…

YOLOv8改进 | 主干篇 | 利用图像分割网络UNetV2改善图像分割检测性能(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是利用图像分割网络UNetV2的主干来改进我们的YOLOv8分割模型&#xff08;本文的内容虽然YOLOv8所有的功能的用户都能使用&#xff0c;但是还是建议分割的用户使用&#xff09;&#xff0c;U-Net v2 旨在改进医学图像分割的性能&#xff…

C# 方法(函数)

文章目录 C# 方法&#xff08;函数&#xff09;简单示例程序代码运行效果 值传递和引用传递示例程序 运行效果按输出传递参数运行结果 C# 方法&#xff08;函数&#xff09; 简单示例 程序代码 访问的限制符 using System; using System.Collections.Generic; using Syste…

GO-初识包管理

初识包管理&#xff0c;知道项目中文件和文件夹之间的关系 输出&#xff0c;代码&#xff0c;在go编译器运行时会显示在屏幕中 初识数据类型 整型&#xff0c;数字。例如&#xff1a;1、2、3、4 字符串类型&#xff0c;表示文本信息的。例如:“张三”“李四” 布尔类型&#x…

Day51-Nginx多实例知识与大厂企业级实战

Day51-Nginx多实例知识与大厂企业级实战 1. 什么是nginx多实例&#xff1f;2. 为什么要用多实例&#xff1f;3. 大厂数百个业务项目&#xff0c;如何来管理&#xff1f;4. 大厂上百项目web分用户解决方案4.1 编译nginx环境实践&#xff1a;4.2 zuma实例(利用普通用户权限将不同…

Arduino 开发 野火ESP8266模块的串口通信

一、硬件连接 Arduino ESP8266 串口通信是一个常见的任务&#xff0c;允许通过串行接口与其他设备或计算机进行通信。 连接硬件&#xff1a;将野火ESP8266模块通过USB连接到电脑。注意电源为3.3V。 选择开发板和端口&#xff0c;在Arduino IDE中&#xff0c;选择ESP8266开发板…

图神经网络实战(5)——常用图数据集

图神经网络实战&#xff08;5&#xff09;——常用图数据集 0. 前言0. 图数据集介绍2. Cora 数据集3. Facebook Page-Page 数据集小结系列链接 0. 前言 图数据集往往比单纯的连接集合更丰富&#xff0c;节点和边也可以具有表示分数、颜色、单词等的特征。在输入数据中包含这些…

NLP---Bert分词

目录&#xff1a; Q&#xff1a;bert分词步骤1&#xff1a;构建N * N 的相关性矩阵&#xff0c;计算相邻两个字的相关性&#xff0c;低的话&#xff08;<阈值&#xff09;就切割。2&#xff1a;将A词进行mask计算出A的embedding&#xff0c;然后将AB两个词一起mask&#xff…

【滑动窗口】长度最小的子数组|无重复字符的最长子串|最大连续1的个数 III|将 x 减到 0 的最小操作数

1. 长度最小的子数组 - 力扣&#xff08;LeetCode&#xff09; 1.题目解析&#xff1a; 2.算法原理 &#xff08;1&#xff09;方法一&#xff1a;暴力列举出所有的子数组的和 时间复杂度&#xff1a;O&#xff08;n**2&#xff09;&#xff1a;枚举所有子数组O&#xff08;…