终于把AUC的计算方式搞懂了!

2024-06-15 09:20
文章标签 计算 方式 终于 搞懂 auc

本文主要是介绍终于把AUC的计算方式搞懂了!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 横纵坐标

纵坐标:sensitivity或者TPR

在这里插入图片描述

横坐标:FPR 或者 1-Specificity

在这里插入图片描述

2. 计算方法

2.1 方法1

def get_roc_auc(y_true, y_score):"""正样本得分大于负样本得分的概率,需要遍历每个正样本和每个负样本1. 选取所有正样本与负样本的两两组合2. 计算正样本预测值pos_score大于负样本预测值neg_score的概率:如果pos_score>neg_score,概率为1如果pos_score==neg_score,概率为0.5如果pos_score<neg_score,概率为0如果有M个正样本,N个负样本,则会产生M × N 个样本对,所以算法时间复杂度为O ( M × N ) 。:param y_true::param y_score::return:"""gt_pred = list(zip(y_true, y_score))probs = []pos_samples = [x for x in gt_pred if x[0] == 1]neg_samples = [x for x in gt_pred if x[0] == 0]# 计算正样本大于负样本的概率for pos in pos_samples:for neg in neg_samples:if pos[1] > neg[1]:probs.append(1)elif pos[1] == neg[1]:probs.append(0.5)else:probs.append(0)return np.mean(probs)
y_true = [0, 0, 1, 1, 0, 1, 0, 1, 1, 1]
y_score = [0.1, 0.4, 0.6, 0.6, 0.7, 0.7, 0.8, 0.8, 0.9, 0.9]print(get_roc_auc(y_true, y_score))

2.2 方法2

根据公式计算

在这里插入图片描述

def get_roc_auc(y_true, y_score):ranks = enumerate(sorted(zip(y_true, y_score), key=lambda x: x[-1]), start=1)pos_ranks = [x[0] for x in ranks if x[1][0] == 1]M = sum(y_true)N = len(y_true) - Mauc = (sum(pos_ranks) - M * (M + 1) / 2) / (M * N)return auc

2.3 方法3

from sklearn.metrics import roc_auc_score
import numpy as np
y_true = np.array([1]*1693+[0]*8307)
y_score = np.random.rand(10000)
auc = roc_auc_score(y_true, y_score)
auc

这篇关于终于把AUC的计算方式搞懂了!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1063052

相关文章

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

uva 11178 计算集合模板题

题意: 求三角形行三个角三等分点射线交出的内三角形坐标。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

XTU 1237 计算几何

题面: Magic Triangle Problem Description: Huangriq is a respectful acmer in ACM team of XTU because he brought the best place in regional contest in history of XTU. Huangriq works in a big compa

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念

【即时通讯】轮询方式实现

技术栈 LayUI、jQuery实现前端效果。django4.2、django-ninja实现后端接口。 代码仓 - 后端 代码仓 - 前端 实现功能 首次访问页面并发送消息时需要设置昵称发送内容为空时要提示用户不能发送空消息前端定时获取消息,然后展示在页面上。 效果展示 首次发送需要设置昵称 发送消息与消息展示 提示用户不能发送空消息 后端接口 发送消息 DB = []@ro

脏页的标记方式详解

脏页的标记方式 一、引言 在数据库系统中,脏页是指那些被修改过但还未写入磁盘的数据页。为了有效地管理这些脏页并确保数据的一致性,数据库需要对脏页进行标记。了解脏页的标记方式对于理解数据库的内部工作机制和优化性能至关重要。 二、脏页产生的过程 当数据库中的数据被修改时,这些修改首先会在内存中的缓冲池(Buffer Pool)中进行。例如,执行一条 UPDATE 语句修改了某一行数据,对应的缓