机器学习--ROC AUC

参考

机器学习-ROC曲线 - 知乎 (zhihu.com)icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/347470776一文看懂ROC、AUC - 知乎 (zhihu.com)icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/81202617

在了解之前,我们先来认识一下以下的概念

针对一个二分类问题,将实例分成正类(postive)或者负类(negative)。但是实际中分类时,会出现四种情况:

(1)TP(True Postive):是正类并且被预测为正类

(2)FN(False Negative):是正类,但是被预测成为负类

(3)FP(False Postive):是负类,但是被预测成为正类

(4)TN(True Negative):是负类,但是被预测成为负类

1.ROC曲线的定义

ROC的全称是Receiver Operating Characteristic Curve,中文名字叫“受试者工作特征曲线”,顾名思义,其主要的分析方法就是画这条特征曲线。

它显示了在不同阈值下真正例率(True Positive Rate,也称为召回率)与假正例率(False Positive Rate)之间的关系。

横轴:假正类率 (false postive rate, FPR),特异度,划分实例中所有负例占所有负例的比例;TNR=1-FPR。

纵轴:真正类率 ==Recall(true postive rate, TPR),灵敏度,Sensitivity(正类覆盖率)

ROC 曲线中横轴和纵轴的含义以及与阈值的关系。

阈值

举一个雷达兵的例子。每一个雷达兵用的都是同一台雷达返回的结果,但是每一个雷达兵内心对其属于敌军轰炸机的判断是不一样的,可能1号兵解析后认为结果大于0.9,就是轰炸机,2号兵解析后认为结果大于0.85,就是轰炸机,依次类推,每一个雷达兵内心都有自己的一个判断标准(也即对应分类器的不同“阈值”),这样针对每一个雷达兵,都能计算出一个ROC曲线上的关键点(一组FPR,TPR值),把大家的点连起来,也就是最早的ROC曲线了。

当改变分类器的阈值时,会影响到对正例和负例的界定,从而影响到分类器的性能。

一般来说,降低阈值会增加真正例率(TPR),但也会导致增加假正例率(FPR)。ROC 曲线展示了在不同阈值下这种权衡关系。

具体来说,当阈值设定得很低时,分类器可能会将大部分样本判定为正例,这会提高真正例率(TPR),但也会导致增加假正例率(FPR)。

相反,当阈值设定得很高时,分类器可能只将少数样本判定为正例,这会降低真正例率(TPR),但也会导致减少假正例率(FPR)。

ROC 曲线展示了在所有可能阈值下 TPR 和 FPR 的变化情况,帮助我们理解分类器在不同判定标准下的性能表现。

ROC曲线绘制了在不同阈值下的TPR和FPR之间的折衷关系。曲线越靠近左上角(0,1)处,分类器性能越好,因为在这个点处TPR最大,而FPR最小。

AUC(Area Under the Curve):是ROC曲线下的面积,用来衡量分类器性能的一个数值。AUC值的范围在0到1之间,完美分类器的AUC值为1,随机猜测的分类器的AUC值为0.5。

2. 代码演示

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_curve, roc_auc_score
from sklearn.linear_model import LogisticRegression
import matplotlib.pyplot as plt# 生成模拟数据集
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)# 将数据集分割为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 构建分类模型(这里以逻辑回归为例)
model = LogisticRegression()
model.fit(X_train, y_train)# 获取预测概率
y_pred_proba = model.predict_proba(X_test)[:, 1]# 计算 ROC 曲线的各项指标
fpr, tpr, thresholds = roc_curve(y_test, y_pred_proba)
auc = roc_auc_score(y_test, y_pred_proba)# 绘制 ROC 曲线
plt.figure(figsize=(8, 6))
plt.plot(fpr, tpr, label=f'ROC curve (AUC = {auc:.2f})', color='orange')
plt.stackplot(fpr, tpr, color='skyblue', alpha=0.3)  # 添加阴影效果
plt.text(0.6, 0.4, f'AUC = {auc:.3f}', fontdict=dict(size=12))  # 添加文本标签
plt.plot([0, 1], [0, 1], 'k--')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic (ROC) Curve')
plt.legend(loc='lower right')
plt.show()print(f"AUC值为: {auc:.4f}")

结果展示

3. 一些其他地模型评估参数

a. 准确率(Accuracy)

所有预测正确的和所有test集的比例

b. 精确率(Precision)

也称为查准率,表示分类器预测为正类别的样本中有多少确实属于正类别的比例。

计算公式为:Precision = TP / (TP + FP)

c.召回率(Recall)

也称为查全率或灵敏度,表示实际为正类别的样本中被分类器预测为正类别的比例。

计算公式为:Recall = TP / (TP + FN)

d.F1分数(F1-score)

是精确率和召回率的调和平均值,综合考虑了两者的性能。

F1-score的取值范围在0到1之间,是精确率和召回率的平衡指标。

计算公式为:F1-score = 2 * (Precision * Recall) / (Precision + Recall)。

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

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

相关文章

下载的 MongoDB bin目录下没有mongo.exe文件问题解决

MongoDB 4.4版本之前,我们可以在MongoDB的安装目录的bin文件夹中找到mongo.exe这个命令行工具。但是从MongoDB 4.4版本开始,MongoDB官方已经不再提供独立的mongo.exe可执行文件,而是将其整合到了mongosh这个新的交互式Shell中。 我们可以访问…

k8s的pod基础

pod:pod是k8s中最小的资源管理组件。 pod也是最小化运行容器化的应用的资源管理对象。 pod是一个抽象的概念,可以理解为一个或者多个容器化应用的集合。 在一个pod当中运行一个容器是最常用的方式。在一个pod当中同时运行多个容器,在一个pod当中可以同…

常见网络协议

1.DNS协议 (域名系统) DNS协议使用的端口号是53 位于OSI模型中的应用层 DNS系统的作用:将域名(网址)解析为IP地址。 DNS的基本原理是:将域名映射到IP地址 DNS工作流程 当用户给定一个域名&#xff0…

Linux磁盘管理与文件系统

目录 前言 一、磁盘基础 1、磁盘的物理结构 2、磁盘的数据结构 3、磁盘存储容量 4、硬盘接口类型 二、磁盘分区 1、磁盘分区的优缺点 2、磁盘两种分区方式 2.1 MBR分区 2.2 GPT分区(了解) 三、管理磁盘分区的工具 1、fdisk 2、blkid 3、free 4、mkfs 5、mkswa…

GitHub上的15000个Go模块存储库易受劫持攻击

内容概要: 目前研究发现,GitHub上超过15000个Go模块存储库容易受到一种名为“重新劫持”的攻击。 由于GitHub用户名的更改会造成9000多个存储库容易被重新劫持,同时因为帐户删除,会对6000多个存储库造成重新劫持的危机。目前统计…

Spark二、Spark技术栈之Spark Core

Spark Core spark核心:包括RDD、RDD算子、RDD的持久化/缓存、累加器和广播变量 学习链接:https://mp.weixin.qq.com/s/caCk3mM5iXy0FaXCLkDwYQ 一、 RDD 1.1 为什么要有RDD 在许多迭代式算法(比如机器学习、图算法等)和交互式数据挖掘中,…

系列五、搭建Naco(集群版)

一、搭建Naco(集群版) 1.1、前置说明 (1)64位Red Hat7 Linux 系统; (2)64位JDK1.8;备注:如果没有安装JDK,请参考【系列二、Linux中安装JDK】 (3&…

《绝地求生》改名卡快速获得方法 绝地求生改名卡怎么获得

《绝地求生》改名卡是很多小伙伴所在意的物品,购买通行证后需要提升一定的等级才能入手,而怎么升级最快最划算呢?今天闲游盒带来“米奇”分享的《绝地求生》改名卡快速获得方法,赶紧来试试吧。 吃鸡刚刚迎来了更新,通行…

Flink版本更新汇总(1.14-1.18)

0、汇总 1.14.0 1.有界流支持 Checkpoint; 2.批执行模式支持 DataStream 和 Table/SQL 混合应用; 3.新增 Hybrid Source 功能; 4.新增 缓冲区去膨胀 功能; 5.新增 细粒度资源管理 功能; 6.新增 DataStream 的 Pulsar …

MySQL取出N列里最大or最小的一个数据

如题,现在有3列,都是数字类型,要取出这3列里最大或最小的的一个数字 -- N列取最小 SELECT LEAST(temperature_a,temperature_b,temperature_c) min FROM infrared_heat-- N列取最大 SELECT GREATEST(temperature_a,temperature_b,temperat…

滑动窗口最大值(力扣239题)

单调递减队列: 在解决题目之前,我们先来了解一下单调递减队列,它其实就是在队列的基础上多加了一些限制,如下图: 要求队列中的元素必须按从大到小的顺序排列。 如果向单调递减队列中加入数字 1,可以直接加入…

C# Onnx yolov8 竹签计数、一次性筷子计数

目录 效果 模型信息 项目 代码 数据集 下载 C# Onnx yolov8 竹签计数、一次性筷子计数 效果 模型信息 Model Properties ------------------------- date:2024-01-03T08:55:22.768617 author:Ultralytics task:detect license&#x…