AUC的是如何计算的
本文主要讲解AUC是如何计算的,通过本文了解AUC的具体计算过程
文章先介绍如何使用sklearn包计算AUC,这是实际中常用的方法
然后讲解sklearn包计算AUC的详细流程,并用代码自行实现AUC的计算
01.调用sklearn计算AUC
调用sklearn包计算AUC的代码
# -----调用sklearn包计算AUC--------
from sklearn import metrics
import numpy as np
import pandas as pd
#=====================标签与score数据=============================
lable = np.array([0, 1 ,0,1 ,1,1 ,0 ,1,0,1,0,0,0,0,1,0])
score = np.array([0.2, 0.28,0.1 ,0.6,0.5, 0.3, 0.6, 0.8,0.2,0.25,0.4,0.2,0.5,0.3,0.18,0.18])
#=====================标签与score数据=============================
fpr, tpr, thresholds = metrics.roc_curve(lable,score,drop_intermediate=False)
auc = metrics.auc(fpr, tpr)
print('FPR:'+str(fpr))
print('TPR:'+str(tpr))
print('AUC:'+str(auc))
运行结果
FPR:[0. 0. 0.11111111 0.22222222 0.33333333 0.44444444 0.44444444 0.44444444 0.77777778 0.88888889 1. ]
TPR:[0. 0.14285714 0.28571429 0.42857143 0.42857143 0.57142857 0.71428571 0.85714286 0.85714286 1. 1. ]
AUC:0.6666666666666666
02.计算逻辑
使用sklearn时需要注意,
metrics.roc_curve默认drop_intermediate为True,
算出的fpr和tpr会删掉线性过渡点(即上面图中标黄的点)!
03.自写代码实现
按照以上逻辑,编写代码如下:
# -*- coding: utf-8 -*-
"""
AUC计算与ROC曲线绘画
"""
import numpy as np
import pandas as pd
#=====================标签与score数据=============================
lable = np.array([0, 1 ,0,1 ,1,1 ,0 ,1,0,1,0,0,0,0,1,0])
score = np.array([0.2, 0.28,0.1 ,0.6,0.5, 0.3, 0.6, 0.8,0.2,0.25,0.4,0.2,0.5,0.3,0.18,0.18])
#===================计算FPR和TPR==========================================
df = pd.DataFrame({'score':score,'label':lable}) # 生成【分值,标签】的DataFrame
df = df.sort_values('score',ascending=False).reset_index(drop=True) # 对分值进行排序
df['last_score'] = df['score'].diff(-1)!=0 # 标记是否是同一个socre值的最后一条数据
df['csum0'] = (df['label']==0).cumsum() # 0类样本的累计条数
df['csum1'] = (df['label']==1).cumsum() # 1类样本的累计条数
df['fpr'] = df['csum0']/(df['label']==0).sum() # 计算fpr:0类样本的累计占比
df['tpr'] = df['csum1']/(df['label']==1).sum() # 计算tpr:1类样本的累计占比
df = df[df['last_score']==True]
start_row = pd.DataFrame( {'score':score.max()+1,'fpr':0,'tpr':0},pd.Index(range(1))) # 起始行[0,0]
df = pd.concat([start_row,df[['score','fpr','tpr']]]).reset_index(drop=True) # 添加起始行到df
#=============绘画ROC曲线===================================
import matplotlib.pyplot as plt
plt.plot(df['fpr'],df['tpr'], marker='o', markerfacecolor='r', markersize=5) # 绘制ROC曲线
plt.fill_between(df['fpr'],0, df['tpr'], facecolor='green', alpha=0.3) # 给ROC区域添加颜色
plt.xlim(0,1);plt.ylim(0,1); # 限制x,y轴的范围
plt.title('ROC');plt.xlabel('fpr');plt.ylabel('tpr') # 加标题
#===============计算AUC======================================
df['area'] = 0 # 初始化面积为0
for i in range(1,df.shape[0]):df.loc[i,'area'] = (df['tpr'][i]+df['tpr'][i-1])*(df['fpr'][i]-df['fpr'][i-1])/2 # 添加每小段的面积
auc = df['area'].sum()
#=======打印结果=======================================
print('=====FPR和TPR====================')
print(df)
print('=====AUC====================')
print('AUC:'+str(auc))
运行结果:
=====FPR和TPR====================score fpr tpr area
0 1.80 0.000000 0.000000 0.000000
1 0.80 0.000000 0.142857 0.000000
2 0.60 0.111111 0.285714 0.023810
3 0.50 0.222222 0.428571 0.039683
4 0.40 0.333333 0.428571 0.047619
5 0.30 0.444444 0.571429 0.055556
6 0.28 0.444444 0.714286 0.000000
7 0.25 0.444444 0.857143 0.000000
8 0.20 0.777778 0.857143 0.285714
9 0.18 0.888889 1.000000 0.103175
10 0.10 1.000000 1.000000 0.111111
=====AUC====================
AUC:0.6666666666666667
从结果可见,自行计算结果与sklearn包运行结果一致。
AUC的是如何计算的相关推荐
- auc评测指标如何计算?其他的评测指标有吗?假设阙值为0.5,如何计算这个点?
目录 混淆矩阵(Confusion matrix) ROC曲线 AUC(Area under the ROC curve) AUC如何求解 混淆矩阵(Confusion matrix) 混淆矩阵是理解 ...
- ROC和AUC介绍以及如何计算AUC(转载+自己重新排版整理)
ROC(Receiver Operating Characteristic) 曲线和AUC常被用来评价一个二值分类器(binary classifier)的优劣,对两者的简单介绍见[2]. 这篇博文简 ...
- ROC和AUC介绍以及如何计算AUC
转自: http://alexkong.net/2013/06/introduction-to-auc-and-roc/ ROC(Receiver Operating Characteristic)曲 ...
- matlab计算auc,ROC和AUC介绍以及如何计算AUC
ROC(Receiver Operating Characteristic)曲线和AUC常被用来评价一个二值分类器(binary classifier)的优劣,对两者的简单介绍见这里.这篇博文简单介绍 ...
- 机器学习之分类性能度量指标 : ROC曲线、AUC值、正确率、召回率
北京 | 高性能计算之GPU CUDA课程11月24-26日3天密集学习 快速带你晋级阅读全文> 在分类任务中,人们总是喜欢基于错误率来衡量分类器任务的成功程度.错误率指的是在所有测试样例中错分 ...
- ROC曲线与AUC区域的理解与实践
Receiver Operating Characteristic Area Under the Curve (ROC and AUC). 如何向别人解释 ROC AUC 对评价机器学习算法的意义: ...
- 【深度学习-机器学习】分类度量指标 : 正确率、召回率、灵敏度、特异度,ROC曲线、AUC等
来源于博文:https://blog.csdn.net/tanzuozhev/article/details/79109311 在分类任务中,人们总是喜欢基于错误率来衡量分类器任务的成功程度.错误率指 ...
- 【杂纪】从ROC曲线到AUC值,再到Mann–Whitney U统计量
统计检验中的两类错误 在进行假设检验时,分别提出原假设(Null Hypothesis)和备择假设(Alternative Hypothesis),检验结果可能出现的两类错误: 原假设实际上是正确的, ...
- 分类性能度量指标:ROC曲线、AUC值、正确率、召回率、敏感度、特异度
在分类任务中,人们总是喜欢基于错误率来衡量分类器任务的成功程度.错误率指的是在所有测试样例中错分的样例比例.实际上,这样的度量错误掩盖了样例如何被分错的事实.在机器学习中,有一个普遍适用的称为混淆矩阵 ...
最新文章
- python3 requests content和text 区别
- delphi程序设计之底层原理
- OpenCV场景文本识别的实例(附完整代码)
- 欠条和借条傻傻分不清?小心借出的钱要不回!
- 洛谷P1801 黑匣子 双堆套路的使用
- 键盘输入Scanner类方法属性使用
- Laravel核心解读--完结篇 1
- wps临时文件不自动删除_今天才发现,原来C盘这些文件夹可以删除,难怪你的电脑越用越卡...
- windows安装rockmongo的步骤
- mysql判断后执行查询语句吗_如何看mysql执行的sql语句
- python csdn_Python制作CSDN免积分下载器
- HTML页面基本结构介绍
- android vendor接口,HIDL众多service在那启动的--/vendor/etc/init/android.hardware.*@2.0-service.rc...
- 什么是UI设计?UI学习一般分几个阶段呢?
- linux 汇编 变址寻址,汇编--寻址方式(示例代码)
- 2019届阿里巴巴春招前端面试经历
- 软考知识点---12软件工程基础
- 与计算机相关的英语句子,计算机英语的常用句子
- vue2_mix混入的用法
- spring.factories机制
热门文章
- linux管理光标显示与否
- [leetcode 面试题 17.17] -- 多次搜索,KMP与字典树
- 对View的onMeasure方法理解
- 算法6.7BFS 算法6.8-6.9最小生成树
- 5G无线关键技术 — 非正交多址接入技术
- LTSPICE使用教程:参数变量和参数扫描
- Python unittest 之二: 测试类的执行
- 吐槽微软,远离微软!
- springboot学习(五)自动配置原理及@Conditional派生注解
- Bad file format reading the append only file: make a backup of your AOF file, then use ./redis-check