【科研入门】评价指标AUC原理及实践

在这里插入图片描述

在这里插入图片描述

评价指标AUC原理及实践

目录

    • 评价指标AUC原理及实践
      • 一、二分类评估指标
          • 1.1 混淆矩阵
          • 1.2 准确率 Accuracy
            • 定义
            • 公式
            • 局限性
          • 1.3 精确率 Precision 和 召回率 Recall
            • 定义
            • 公式
          • 1.4 阈值
            • 定义
            • 阈值的调整
          • 1.5 ROC与AUC
            • 引入
            • 定义
            • 公式理解
            • AUC算法

一、二分类评估指标

1.1 混淆矩阵

对于二分类问题,真实的样本标签有两类,我们学习器预测的类别有两类,根据二者的类别组合可以划分为四组,如下表所示:

在这里插入图片描述

上表即为混淆矩阵,其中,行表示预测的label值,列表示真实label值。TP,FP,FN,TN分别表示如下意思:

  • 真正类(True Positives, TP):这是模型正确预测为正类的样本数量。换句话说,这些样本在实际上也是正类,模型也预测为正类。
  • 假正类(False Positives, FP):这是模型错误地预测为正类的样本数量,而这些样本在实际上是负类。有时也称为“假警报”。
  • 假负类(False Negatives, FN):这是模型错误地预测为负类的样本数量,而这些样本在实际上是正类。有时也称为“漏报”。
  • 真负类(True Negatives, TN):这是模型正确预测为负类的样本数量。换句话说,这些样本在实际上也是负类,模型也预测为负类。

由此可得,TP和TN是我们预测准确的样本,而FP和FN是我们预测错误的样本。

1.2 准确率 Accuracy
定义

准确率表示的是预测正确的样本数占样本总数的比例。

公式

用混淆矩阵计算的话,准确率可以表示为:

A c c u r a c y = T P + T N T P + F P + T N + F N Accuracy=\frac{TP+TN}{TP+FP+TN+FN} Accuracy=TP+FP+TN+FNTP+TN

局限性

对于二分类问题,样本是极其不平衡的。对于大数据集来说,标签为1的正样本数据往往不足10%,那么如果分类器将所有样本判别为负样本,那么仍可以达到90%以上的分类准确率,但这个分类器的性能显然是非常差的。

1.3 精确率 Precision 和 召回率 Recall
定义

精确率表示预测结果中,预测为正样本的样本中,正确预测为正样本的概率

召回率表示原始样本中,本就为正样本的样本中,正确预测为正样本的概率。

公式

二者用混淆矩阵表示如下:

P r e c i s i o n = T P T P + F P Precision=\frac{TP}{TP+FP} Precision=TP+FPTP

R e c a l l = T P T P + F N Recall=\frac{TP}{TP+FN} Recall=TP+FNTP

1.4 阈值
定义

预测一个样本的正负是通过模型给出的概率值设定的阈值进行比较后得出的,如果模型给出的概率值大于阈值,该样本被预测为正例;如果小于阈值,则被额预测为负例

我们会将所有的结果按照概率值进行降序排序,这个阈值可以将排序结果截断为两部分。

阈值的调整

如果提高阈值,模型会变得很保守,即只有它非常确定一个样本是正例时才会预测为正例,这样能减少假正例(FP)的数量,从而提高精确率

如果降低阈值,模型更倾向于将样本预测为正例,这样就能减少漏检假负例(FN)的数量,从而提高召回率

1.5 ROC与AUC
引入

学习到这里,我们会抛出两个问题:

  • 设定阈值后再来计算精确率和召回率太麻烦了,阈值应该被设定为多少?有没有不用设定阈值就可以直接评价模型性能的方法呢?

  • 我们是根据概率值降序排序的结果来划分预测的正负例的,我们要怎样做才能让正例经过模型预测后的概率值都比负例高呢从而来提高模型的性能呢?

没错,ROC与AUC就可以解决以上的两个问题。

定义

ROC

  1. 首先,将模型对每个样本预测出来的属于正类的概率值进行降序排序,同时将概率值和标签组合成一个表格。

  2. 接着,从排序中最高的概率值开始,逐个将每个样本的概率值视作阈值。对于每个这样的阈值,计算出所有高于或等于此阈值的样本被视为正例,而低于此阈值的样本被视为负例。

  3. 对于每个阈值,都需要计算两个关键指标:TPR和FPR

  • T P R = T P T P + F N TPR=\frac{TP}{TP+FN} TPR=TP+FNTP 作纵轴 横轴长度即为正样本数
  • F P R = F P T N + F P FPR=\frac{FP}{TN+FP} FPR=TN+FPFP​ 作横轴 纵轴长度即为负样本数

动图

AUC

AUC即为ROC曲线下的面积。

AUC值越接近1,表明模型的性能越好;值越接近0.5(或更低),则表明模型的性能接近(或不如)随机猜测。

公式理解

为什么要选用这两个公式作为ROC曲线的横纵坐标?

T P R = T P T P + F N TPR=\frac{TP}{TP+FN} TPR=TP+FNTP

F P R = F P T N + F P FPR=\frac{FP}{TN+FP} FPR=TN+FPFP

TPR的分母TP+FN是全部的真实正例数,FPR的分母TN+FP是全部的真实负例数,分母并不会变化。

假设正例的总数为m,负例的总数是n,对按照概率值倒序排序的概率列从上到下设定阈值,每遇到一个真实正例,TPR就增加 1 m \frac{1}{m} m1,每遇到一个真实负例,那么FPR就增加 1 n \frac{1}{n} n1​。

AUC算法

AUC可以通过计算ROC积分来得到,但是积分过于麻烦。

因此,我们通过对所有可能的正负样本对,统计其中模型预测得分正确地将正样本得分高于负样本的比例

import numpy as np
from sklearn import metrics##给定的真实y 和 预测pred
y = np.array([1,0,0,0,1,0,1,0,0,1])
pred = np.array([0.9, 0.4, 0.3, 0.1, 0.35, 0.6, 0.65, 0.32, 0.8, 0.7])numerator = 0    #分子
denominator = 0  #分母for i in range(0, len(y)-1):for j in range(i, len(y)):if y[i] != y[j]:denominator += 1#统计所有正负样本对中,模型把相对位置排序正确的数量if(y[i]>y[j] and pred[i]>pred[j]) or (y[i]<y[j] and pred[i]<pred[j]):numerator += 1print("AUC =" , numerator/denominator)

或者可以用库中的sklearn.metrics.auc(fpr,tpr)方法

from sklearn import metricsfpr, tpr, thresholds = metrics.roc_curve(y, pred, pos_label=1)# 真实的标签为y,模型对样本的预测概率为pred,正类的标签是1,fpr是假正率,tpr是真正率,thresholds是阈值
print(metrics.auc(fpr, tpr))# metrics.auc(fpr,tpr)通过对提供的 fpr 和 tpr 数据点进行数值积分(通常使用梯形法则),计算出ROC曲线下的面积。
实的标签为y,模型对样本的预测概率为pred,正类的标签是1,fpr是假正率,tpr是真正率,thresholds是阈值
print(metrics.auc(fpr, tpr))# metrics.auc(fpr,tpr)通过对提供的 fpr 和 tpr 数据点进行数值积分(通常使用梯形法则),计算出ROC曲线下的面积。

在这里插入图片描述

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

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

相关文章

【MYSQL】MySQL整体结构之系统服务

一、系统服务层 学习了MySQL网络连接层后&#xff0c;接下来看看系统服务层&#xff0c;MySQL大多数核心功能都位于这一层&#xff0c;包括客户端SQL请求解析、语义分析、查询优化、缓存以及所有的内置函数&#xff08;例如&#xff1a;日期、时间、统计、加密函数...&#xff…

【Java8新特性】二、函数式接口

这里写自定义目录标题 一、什么是函数式接口二、自定义函数式接口三、作为参数传递 Lambda 表达式四、四大内置核心函数式接口1、消费形接口2、供给形接口3、函数型接口4、断言形接口 一、什么是函数式接口 只包含一个抽象方法的接口&#xff0c;称为函数式接口。你可以通过 L…

2024年天津市安全员C证证模拟考试题库及天津市安全员C证理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年天津市安全员C证证模拟考试题库及天津市安全员C证理论考试试题是由安全生产模拟考试一点通提供&#xff0c;天津市安全员C证证模拟考试题库是根据天津市安全员C证最新版教材&#xff0c;天津市安全员C证大纲整理…

html+javascript,用date完成,距离某一天还有多少天

图片展示: html代码 如下: <style>* {margin: 0;padding: 0;}.time-item {width: 500px;height: 45px;margin: 0 auto;}.time-item strong {background: orange;color: #fff;line-height: 100px;font-size: 40px;font-family: Arial;padding: 0 10px;margin-right: 10px…

私有化即时通讯软件,WorkPlus提供的私有化、安全通讯解决方案

在当今信息化快速发展的时代&#xff0c;安全问题已经成为各行各业关注的焦点。特别是在金融、政府单位和芯片等关键行业&#xff0c;信息安全的重要性不言而喻。这些行业涉及到大量的敏感数据和关键信息&#xff0c;一旦发生泄露&#xff0c;可能会对国家安全、企业利益甚至个…

【环境搭建】ubuntu工作站搭建全流程(显卡4090)

安装ubuntu22.04系统 首先&#xff0c;先压缩windows分区&#xff0c;按住Win X快捷键&#xff0c;选择磁盘管理,压缩分区&#xff0c;压缩出新的分区用于安装ubuntu22.04 windows插入系统盘&#xff0c;点击重启&#xff0c;一直按F12,选择系统盘启动方式语言选择chinese–…

K8S哲学 - 常见的资源类型

资源类型 namespace kubectl apply 和 kubectl create kubectl apply是声明式的 和 kubectl create是命令式的对吗 deployment 和 job的区别 k8s 的 lable 的意义

UDP网络程序

上一章中&#xff0c;我们介绍了socket&#xff0c;以及TCP/UDP协议。这一章带大家实现几个UDP协议的网络服务。我们需要一个 服务端和一个客户端。 1.服务端实现 1.1socket函数 #include <sys/types.h> #include <sys/socket.h>int socket(int domain, in…

vue3+ts中判断输入的值是不是经纬度格式

vue3ts中判断输入的值是不是经纬度格式 vue代码&#xff1a; <template #bdjhwz"{ record }"><a-row :gutter"8" v-show"!record.editable"><a-col :span"12"><a-input placeholder"经度" v-model:v…

如何进入Windows 11的安全模式?这里提供详细步骤

如果你在启动 Windows 11 电脑时遇到问题,重新启动到安全模式可能会有所帮助,该模式会暂时禁用驱动程序和功能以使你的电脑更稳定。这是如何做到的。 在启动时进入安全模式 在 Windows 7 及更早版本中,你通常可以在打开电脑后立即按功能键(如 F8)来启动安全模式。Micros…

u盘为什么一插上电脑就蓝屏,u盘一插电脑就蓝屏

u盘之前还好好的&#xff0c;可以传输文件&#xff0c;使用正常&#xff0c;但是最近使用时却出现问题了。只要将u盘一插入电脑&#xff0c;电脑就显示蓝屏。u盘为什么一插上电脑就蓝屏呢?一般&#xff0c;导致的原因有以下几种。一&#xff0c;主板的SATA或IDE控制器驱动损坏…

Java 实现自定义注解

一、interface 关键字 我们想定义一个自己的注解 需要使用 interface 关键字来定义。 如定义一个叫 MyAnnotation 的注解&#xff1a; public interface MyAnnotation { } 二、元注解 光加上 interface 关键字 还不够&#xff0c;我们还需要了解5大元注解 RetentionTargetDo…

JavaWeb--JavaScript-事件绑定/BOM/DOM编程

目录 1. 事件绑定 1.1. 什么是事件 1.2. 常见事件 1.3. 事件的绑定 1.3.1. 属性绑定 1.3.2. DOM编程绑定 1.4. 事件的触发 1.4.1. 行为触发 1.4.2. DOM编程触发 2. BOM 编程 2.1. 什么是 BOM 2.2. window对象的常见属性(了解) 2.3. window对象的常见方法(了解) 2…

YOLOv8绝缘子边缘破损检测系统(可以从图片、视频和摄像头三种方式检测)

可检测图片和视频当中出现的绝缘子和绝缘子边缘是否出现破损&#xff0c;以及自动开启摄像头&#xff0c;进行绝缘子检测。基于最新的YOLO-v8训练的绝缘子检测模型和完整的python代码以及绝缘子的训练数据&#xff0c;下载后即可运行。&#xff08;效果视频&#xff1a;YOLOv8绝…

softmax回归:多分类问题的解码器

随着人工智能技术的不断发展&#xff0c;分类问题在机器学习领域中的地位日益凸显。在众多分类算法中&#xff0c;softmax回归以其独特的优势和广泛的应用场景&#xff0c;成为了处理多分类问题的有力工具。本文将深入探讨softmax回归的原理、应用及其优缺点&#xff0c;以期为…

使用uniapp实现小程序获取wifi并连接

Wi-Fi功能模块 App平台由 uni ext api 实现&#xff0c;需下载插件&#xff1a;uni-WiFi 链接&#xff1a;https://ext.dcloud.net.cn/plugin?id10337 uni ext api 需 HBuilderX 3.6.8 iOS平台获取Wi-Fi信息需要开启“Access WiFi information”能力登录苹果开发者网站&…

Word wrap在计算机代表的含义(自动换行)

“Word wrap”是一个计算机术语&#xff0c;用于描述文本处理器在内容超过容器边界时自动将超出部分转移到下一行的功能。在多种编程语言和文本编辑工具中&#xff0c;都有实现这一功能的函数或选项。 在编程中&#xff0c;例如某些编程语言中的wordwrap函数&#xff0c;能够按…

数仓维度建模

维度建模 数仓建模方法1. 范式建模法&#xff08;Third Normal Form&#xff0c;3NF&#xff09;2. 维度建模法&#xff08;Dimensional Modeling&#xff09;3. 实体建模法&#xff08;Entity Modeling&#xff09; 维度建模1. 事实表事实表种类事务事实表周期快照事实表累计快…

洛谷-P1596 [USACO10OCT] Lake Counting S

P1596 [USACO10OCT] Lake Counting S - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<bits/stdc.h> using namespace std; const int N110; int m,n; char g[N][N]; bool st[N][N]; //走/没走 int dx[] {-1,-1,-1,0,0,1,1,1}; //八联通 int dy[] {-1,0,1,1,-1,1…

Matlab调C/C++简单模板例子

如果你是需要快速搭建一个matlab调c/c环境&#xff0c;这篇文章可以参考 有了c代码&#xff0c;想在matlab里面调用&#xff0c;可以参考我这个模板 matlab调用代码&#xff1a; clear all close all clcinput1 1; input2 2;[output1,output2] mexfunction(input1,input2);…