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

news2024/11/28 12:52:56

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()

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

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

相关文章

UE5拷贝复制快捷键修改Ctrl+w

UE5默认修改了原来的Ctrl w的快捷键方式,改成Ctrl D 非常不习惯 其实可以在编辑器中进行修改快捷键的 位置在 Editor Preferences ,搜索 Duplicate, 在其中的command selection中,修改 按键为Ctrl w 如图所示; …

[蓝桥杯 2023 省 B] 飞机降落(暴搜DFS+贪心)

总结:为什么你看到题想不出来怎么写呢,我想不到这道题还会用到dfs的思想,顶多能知道可能会有贪心,还是得多做题。 这道题让我想起来导弹拦截和借教室,记得有空做做!!不要研究难题,把…

图书馆管理系统 1.架构项目以及加搭建项目

项目架构图 技术栈 后端 开发语言:java 开发环境:jdk11.0.12 开发工具:IntelliJ IDEA 2022.2.4 项目管理工具:maven 集成框架:springboot 权限控制框架:springSecurity 数据库:mysql 数据库框架…

R语言:microeco:一个用于微生物群落生态学数据挖掘的R包,第八:trans_func class

# 生态学研究人员通常对微生物群落的功能特征感兴趣,因为功能或代谢数据对于解释微生物群落的结构和动态以及推断其潜在机制是强有力的。 # 由于宏基因组测序复杂且昂贵,利用扩增子测序数据预测功能谱是一个很好的选择。 # 有几个软件经常用于此目标&…

【python】Anaconda安装后打不开jupyter notebook(网页不自动跳出)

文章目录 一、遇到的问题:jupyter notebook网页不自动跳出(一)输入jupyter notebook命令(二)手动打开网页 二、解决办法:指定浏览器(一)找文件 jupyter_notebook_config.py&#xff…

Cookie、Session、Token详解及基于JWT的Token实现的用户登陆身份认证

目录 前置知识 Cookie 什么是Cookie Cookie的作用 Cookie的声命周期 Session 什么是Session 服务集群下Session存在的问题 集群模式下Session无法共享问题的解决 Cookie和Session的对比 Token 什么是Token 为什么产生Token 基于JWT的Token认证机制 Token的优势 …

JavaScript初学心得

JavaScript JavaScript原名是livescript,是由美国网景开发的一种用于对网页操作的脚本语言 网页操作(图片切换) 脚本语言(不需要编译 sql,html,css,javascript,由某种解释器直接可以运行) livescript也是面向对象的…

seleniumUI自动化实例(登录CSDN页面)

今天分享一个CSDN登录模块的登录场景 1.配置文件 CSDNconf.py: from selenium import webdriver options webdriver.ChromeOptions() options.binary_location r"D:\Program Files\360\360se6\Application\360se.exe" # 360浏览器安装地址 driver w…

智能合约 之 ERC-721

ERC-721(Non-Fungible Token,NFT)标准 ERC-721是以太坊区块链上的一种代币标准,它定义了一种非同质化代币(Non-Fungible Token,NFT)的标准。NFT是一种加密数字资产,每个代币都具有独…

Unity Toggle处理状态变化事件

Toggle处理状态变化事件,有两个方法。 法一、通过Inspector面板设置 实现步骤: 在Inspector面板中找到Toggle组件的"On Value Changed"事件。单击""按钮添加一个新的监听器。拖动一个目标对象到"None (Object)"字段&am…

【工具】Docker 入门及常用指令

SueWakeup 个人主页:SueWakeup 系列专栏:为祖国的科技进步添砖Java 个性签名:保留赤子之心也许是种幸运吧 目录 1. 什么是 Docker ? 2. Docker 安装 3. Docker 镜像 4. Docker 容器 4.1 运行容器 4.2 查看正在运行的容器 4…

视觉信息处理和FPGA实现第5次作业-Matlab实现图像逆时针旋转90度

一、Matlab2022a安装 链接:https://pan.quark.cn/s/6e177bc7c11d 提取码:dKNN 二、Matlab使用 2.1 新建一个脚本文件(.m文件) 2.2 另存为到便于归档的地方 考虑到.m文件如果不是全英文路径,也有可能会出问题&#…

LiveGBS流媒体平台GB/T28181功能-HTTPS 服务支持配置开启什么时候需要开启HTTPS测试SSL证书配置HTTPS测试证书

LiveGBS功能支持HTTPS 服务支持配置开启什么时候需要开启HTTPS测试SSL证书配置HTTPS测试证书 1、配置开启HTTPS1.1、准备https证书1.1.1、选择Nginx类型证书下载 1.2、配置 LiveCMS 开启 HTTPS1.2.1 web页面配置1.2.2 配置文件配置 2、HTTPS测试证书3、验证HTTPS服务4、为什么要…

1949年-2021年历史县级行政区划分布数据 中国行政村边界数据、乡镇街道边界、行政区划边界

数据范围:全国历史年份县级行政区划 数据类型:面状数据,全国各省市县行政区划边界 数据属性:标准行政区划编码 时间属性:1949年-2021年 分辨率:1:2万--1:5万 数据格式:SHP数据(…

Nginx发布之后可以使用IP访问,不能使用localhost访问, Nginx发布之后可以使用localhost访问,不能使用IP访问,

如标题所说 Nginx发布之后可以使用IP访问,不能使用localhost访问, Nginx发布之后可以使用localhost访问,不能使用IP访问, 修改配置文件也没有用 清除浏览器缓存数据

FPGA通过I2C控制AT24C64

文章目录 前言一、代码设计框图二、IIC_drive模块设计2.1、模块接口:2.2、代码功能描述:2.3、IIC协议实现过程: 三、EEPROM_ctrl模块设计3.1、模块接口:3.2、代码功能描述 四、EEPROM_drive模块五、iic_top模块 前言 继上一篇FPG…

图解CodeWhisperer的安装使用

🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️ 生活的理想,就是为了理想的生活 ! ​ 目录 📘 CodeWhisperer简介 &#…

MFC界面美化第三篇----自绘按钮(重绘按钮)

1.前言 最近发现读者对我的mfc美化的专栏比较感兴趣,因此在这里进行续写,这里我会计划写几个连续的篇章,包括对MFC按钮的美化,菜单栏的美化,标题栏的美化,list列表的美化,直到最后形成一个完整…

Go——切片

1. 特点 slice并不是数组或数组指针。它通过内部指针和相关属性引用数组片段,以实现变长方案。 切片:切片是数组的一个引用,因此切片是引用类型。但自身是结构体,值拷贝传递。切片的长度可以改变,因此,切片…

arm 解决Rk1126 画框颜色变色问题(RGB转NV12)

在Rv1126上直接对Nv12图像进行绘制时,颜色是灰色。故将Nv12转BGR后绘制图像,绘制完成后转成Nv12,BGR的图像颜色是正常的,但是NV12的图像颜色未画全,如图: 1.排查发现是RGB转NV12的函数出现问题&#xff0c…