AUC计算公式推导

AUC计算公式推导AUC 计算公式推导基本公式推算基本排名的公式推算 2 详解如何计算 AUC 计算 AUC 时 推荐 2 个方法 方法一 在有 M 个正样本 N 个负样本的数据集里 一共有 MN 对样本 一对样本即 一个正样本与一个负样本 统计这 MN 对样本里 正样本的预测概率大于负样本的预测概率的个数 其中 这样说可能有点抽象 我举一个例子便能够明白 IDlabelproA0 1B00 4C10 35D10 8 假设有 4 条样本 2 个正样本 2 个负样本 那么

AUC计算公式推导

基本公式推算

AUC计算公式推导


基本排名的公式推算AUC计算公式推导

2.详解如何计算AUC?

ID label pro
A 0 0.1
B 0 0.4
C 1 0.35
D 1 0.8
ID label pro
A 0 0.1
B 0 0.4
C 1 0.4
D 1 0.8
ID label pro
A 0 0.1
B 0 0.4
C 1 0.35
D 1 0.8
ID label pro rank
A 0 0.1 1
C 1 0.35 2
B 0 0.4 3
D 1 0.8 4
ID label pro
A 1 0.8
B 1 0.7
C 0 0.5
D 0 0.5
E 1 0.5
F 1 0.5
G 0 0.3
ID label pro rank
G 0 0.3 1
F 1 0.5 2
E 1 0.5 3
D 0 0.5 4
C 0 0.5 5
B 1 0.7 6
A 1 0.8 7

3.最后的最后,如何用程序验证?

import numpy as np from sklearn.metrics import roc_auc_score y_true = np.array([1, 1, 0, 0, 1, 1, 0]) y_scores = np.array([0.8, 0.7, 0.5, 0.5, 0.5, 0.5, 0.3]) print("y_true is ", y_true) print("y_scores is ", y_scores) print("AUC is", roc_auc_score(y_true, y_scores)) y_true = np.array([0, 0, 1, 1]) y_scores = np.array([0.1, 0.4, 0.35, 0.8]) print("y_true is ", y_true) print("y_scores is ", y_scores) print("AUC is ", roc_auc_score(y_true, y_scores)) 

模拟实际应用场景:

import pandas as pd import numpy as np def auc(df, label='label', predict='predict', prob=False): """ 功能:根据样本实际标签和预测概率(分数)快速计算auc值。 参数: df: pd.DataFrame,至少包含标签号预测结果列; label: 样本实际标签(0, 1); predict: 预测结果(分数或概率均可); prob: predict是否为概率,根据实际情况设置,默认False; 输出:auc值。 """ if prob: df.sort_values(by=predict, ascending=False, inplace=True) else: df.sort_values(by=predict, ascending=True, inplace=True) rank = list(reversed(range(1, df.shape[0] + 1))) df['rank'] = rank mean = df.groupby([predict])['rank'].mean().reset_index() mean.columns = [predict, 'rank_mean'] df = pd.merge(df, mean, on=predict) df[label].value_counts() N, M = df[label].value_counts().sort_index().values formula1 = df[df[label]==1]['rank'].sum() formula2 = M * (M + 1) / 2 return np.round((formula1 - formula2) / (M * N), 4) if __name__ == '__main__': np.random.seed(1234) score = np.round(np.random.normal(600, 100, ).reshape(-1, 1)) temp = np.random.uniform(0, 1, ).reshape(-1, 1) label = score * temp threshold = np.percentile(label, 10) label = np.array([1 if x < threshold else 0 for x in label]).reshape(-1, 1) data = np.concatenate((label, score), axis=1) df = pd.DataFrame(data=data, columns=['label', 'predict']) auc = auc(df=df, label='label', predict='predict') print('测试数据的auc:{}'.format(auc)) 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/175781.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午11:26
下一篇 2026年3月26日 下午11:26


相关推荐

  • jenkins allure_allure的用法

    jenkins allure_allure的用法前言jenkins集成了allure插件,安装插件后运行pytest+allure的脚本即可在jenkins上查看allure报告了。allure安装在运行代码的服务器本机,我这里是用的dock

    2022年7月29日
    19
  • 数据结构 || 二维数组按行存储和按列存储[通俗易懂]

    数据结构 || 二维数组按行存储和按列存储[通俗易懂]问题描述:设有数组A[n,m],数组的每个元素长度为3字节,n的值为1~8,m的值为1~10,数组从内存收地址BA开始顺序存放,请分别用列存储方式和行存储方式求A[5,8]的存储首地址为多少。解题说明:(1)为什么要引入以列序为主序和以行序为主序的存储方式?因为一般情况下存储单元是单一的存储结构,而数组可能是多维的结构,则用一维数组存储数组的数据元素就存…

    2022年7月16日
    17
  • html两个div占满一行,设置div背景色,用float浮动并让键值对形式的文字键右对齐,值左对齐

    html两个div占满一行,设置div背景色,用float浮动并让键值对形式的文字键右对齐,值左对齐

    2021年7月20日
    91
  • phpstorm2021永久激活码[在线序列号][通俗易懂]

    phpstorm2021永久激活码[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    73
  • java dump分析工具_java线程dump分析工具

    java dump分析工具_java线程dump分析工具一、【内存dump】jmap–dump:live,format=b,file=heap.bin二、【线程dump】jstack是java虚拟机自带的一种堆栈跟踪工具。基本介绍:jstack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间…

    2022年10月2日
    4
  • 不同维度矩阵相乘[通俗易懂]

    不同维度矩阵相乘[通俗易懂]在深度学习中经常会遇到不同维度的矩阵相乘的情况,本文会通过一些例子来展示不同维度矩阵乘法的过程。总体原则:在高维矩阵中取与低维矩阵相同维度的分片来与低维矩阵相乘,结果再按分片时的顺序还原为高维矩阵。相乘结果的维度与原来的高维矩阵一致。二维乘一维三维乘一维三维乘二维…

    2025年6月18日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号