[sklearn]性能度量之AUC值

article/2025/5/1 7:22:58

[sklearn]性能度量之AUC值
(from sklearn.metrics import roc_auc_curve)
1.AUC

AUC(Area Under ROC Curve),即ROC曲线下面积。

2.AUC意义

若学习器A的ROC曲线被学习器B的ROC曲线包围,则学习器B的性能优于学习器A的性能;若学习器A的ROC曲线和学习器B的ROC曲线交叉,则比较二者ROC曲线下的面积大小,即比较AUC的大小,AUC值越大,性能越好。

3.sklearn中计算AUC值的方法

形式:
from sklearn.metrics import roc_auc_score
auc_score = roc_auc_score(y_test,y_pred)

import numpy as np
from sklearn.metrics import roc_auc_score
y_true = np.array([0, 0, 1, 1])
y_scores = np.array([0.1, 0.4, 0.35, 0.8])
print(roc_auc_score(y_true, y_scores))
0.75
fpr,tpr,thresholds=metrics.roc_curve(y_true,y_scores,pos_label=1)
print(metrics.auc(fpr,tpr))
0.75

说明:
y_pred即可以是类别,也可以是概率。
roc_auc_score直接根据真实值和预测值计算auc值,省略计算roc的过程。

案例
在这里插入图片描述

#(1)导库
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np#测试样本的数量
parameter=30# (2)随机生成结果集
data=pd.DataFrame(index=range(0,parameter),columns=('probability','The true label'))
data['The true label']=np.random.randint(0,2,size=len(data))
data['probability']=np.random.choice(np.arange(0.1,1,0.1),len(data['probability']))# (3)计算混淆矩阵
cm=np.arange(4).reshape(2,2)
cm[0,0]=len(data[data['The true label']==0][data['probability']<0.5])#TN
cm[0,1]=len(data[data['The true label']==0][data['probability']>=0.5])#FP
cm[1,0]=len(data[data['The true label']==1][data['probability']<0.5]) #FN
cm[1,1]=len(data[data['The true label']==1][data['probability']>=0.5])#TP# (4)计算假正率和真正率
# 首先,画出混淆矩阵。import itertools
classes = [0,1]
plt.figure()
plt.imshow(cm, interpolation='nearest', cmap=plt.cm.Blues)
plt.title('Confusion matrix')
tick_marks = np.arange(len(classes))
print(tick_marks)#[0,1]
plt.xticks(tick_marks, classes,rotation=0)
plt.yticks(tick_marks, classes)
print(cm.shape)
print('cm',cm)#显示中间数字
thresh = cm.max() / 2.
print('thresh',thresh)
print(cm.shape[0])
print(cm.shape[1])
# product(A, B)函数,返回A、B中的元素的笛卡尔积的元组。听起来有点绕,先看代码吧:
for i, j in  itertools.product(range(cm.shape[0]), range(cm.shape[1])):plt.text(j, i, cm[i, j],horizontalalignment="center",color="green" if cm[i,j] > thresh else "black")# tight_layout会自动调整子图参数,使之填充整个图像区域plt.tight_layout()
plt.ylabel('True label')
plt.xlabel('Predicted label')
plt.show()

在这里插入图片描述

# 三、ROC曲线和AUC值
#
# ROC曲线是一系列threshold下的(FPR,TPR)数值点的连线。此时的threshold的取值分别为测试数据
# 集中各样本的预测概率。但,取各个概率的顺序是从大到小的。
# (1)按概率值排序  首先,按预测概率从大到小的顺序排序:
data.sort_values('probability',inplace=True,ascending=False)
# 此时,threshold依次取0.9,0.9,0.9,0.9,0.9,0.9,0.8,0.8,0.7,...。 比如,
# 当threshold=0.9(第3个0.9),一个”0“预测错误,两个”1“预测正确,FPR=1/11=0.09,
# TPR=2/19=0.11。 当threshold=0.9(第5个0.9),一个”0“预测错误,四个”1“预测正确,
# FPR=1/11=0.09,TPR=4/19=0.21。 当threshold=0.6(第1个0.6),三个”0“预测错误,
# 九个”1“预测正确,FPR=3/11=0.27,TPR=9/19=0.47。# (2)计算全部概率值下的FPR和TPR
TPRandFPR=pd.DataFrame(index=range(len(data)),columns=('TP','FP'))
for j in range(len(data)):data1=data.head(n=j+1)FP=len(data1[data1['The true label']==0][data1['probability']>=data1.head(len(data1))['probability']])/float(len(data[data['The true label']==0]))TP=len(data1[data1['The true label']==1][data1['probability']>=data1.head(len(data1))['probability']])/float(len(data[data['The true label']==1]))TPRandFPR.iloc[j]=[TP,FP]
print(TPRandFPR)
# (3)画出最终的ROC曲线和计算AUC值
#
from sklearn.metrics import auc
AUC= auc(TPRandFPR['FP'],TPRandFPR['TP'])
plt.scatter(x=TPRandFPR['FP'],y=TPRandFPR['TP'],label='(FPR,TPR)',color='k')
plt.plot(TPRandFPR['FP'], TPRandFPR['TP'], 'k',label='AUC = %0.2f'% AUC)plt.legend(loc='lower right')
plt.title('Receiver Operating Characteristic')
plt.plot([(0,0),(1,1)],'r--')
#定义x轴长度和y轴长度
plt.xlim([-0.01,1.01])
plt.ylim([-0.01,01.01])
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')
plt.show()# AUC(Area Under roc Cure),顾名思义,其就是ROC曲线小的面积,在此例子中AUC=0.62。AUC越大,说明分类效果越好。

http://chatgpt.dhexx.cn/article/G7xax89s.shtml

相关文章

如何理解ROC曲线和AUC值

1、ROC曲线下的面积就是AUC值。 2、如何绘制ROC曲线&#xff0c;通过改变不同的阈值&#xff0c;每个阈值都可以得到一个混淆矩阵&#xff0c;通过混淆矩阵&#xff0c;可以计算出假阳性率和真阳性率。即该坐标系下的一个点。将阈值从0&#xff0c;调整到1&#xff0c;即可绘制…

AUC值越大_AUC的一般计算和近似计算方式

AUC值是一个概率值&#xff0c;当你随机挑选一个正样本以及负样本&#xff0c;当前的分类算法根据计算得到的Score值将这个正样本排在负样本前面的概率就是AUC值&#xff0c;AUC值越大&#xff0c;当前分类算法越有可能将正样本排在负样本前面&#xff0c;从而能够更好地分类。…

AUC值越大_模型评价——准确率、精确率与召回率与F值、宏平均与微平均、ROC曲线与AUC值...

在上一篇文章中&#xff08;baiziyu&#xff1a;模型评价——训练误差与测试误差、过拟合与欠拟合、混淆矩阵&#xff09;主要介绍了模型评价涉及的基本概念&#xff0c;本节给出一些常用的评价指标。这些指标大致可以分为三类&#xff0c;第一大类是普通的准确率评价指标&…

AUC值越大_「机器学习速成」分类,评估指标(TP、FP、TN、FN),ROC曲线和AUC

大家好&#xff0c;今天我们学习【机器学习速成】之 分类&#xff0c;评估指标(TP、FP、TN、FN)&#xff0c;ROC曲线和AUC。 本节介绍了如何使用逻辑回归来执行分类任务&#xff0c; 并探讨了如何评估分类模型的有效性。 我们 马上学三点 &#xff0c; 逻辑回归用作分类&#x…

AUC值越大_一文看懂ROC、AUC

评测指标是衡量一个算法是否出色的一个重要部分,好的指标能让我们这些炼丹学徒知道,练出来的丹药是否有效果。那么在机器学习中有哪些值得一探究竟的指标呢?本文就PR图,ROC、AUC、mAP这4个方面进行详细探究。 总的来说评价指标的核心得从二分类问题说起:一个类,它实际值有…

入门选手都能理解的ROC曲线与AUC值

项目github地址&#xff1a;bitcarmanlee easy-algorithm-interview-and-practice 欢迎大家star&#xff0c;留言&#xff0c;一起学习进步 1.ROC曲线 在信号检测理论中&#xff0c;接收者操作特征曲线&#xff08;receiver operating characteristic curve&#xff0c;或者叫…

AUC值得含义和计算方法

转载自&#xff1a;http://baijiahao.baidu.com/s?id1597939133517926460&wfrspider&forpc 机器学习备忘录 | AUC值的含义与计算方法 浮生偷闲 18-04-17 05:32 内容导读 在机器学习领域&#xff0c; AUC 值经常用来评价一个二分类模型的训练效果&#xff0c;对于许多机…

python计算偏态、极差、方差、标准差、平均数、中位数、众数

import numpy as np lists[1,2,3,4,5,6,7,8,9]print("极差&#xff1a;",np.max(lists)-np.min(lists))#最大值减最小值 lists_varnp.var(lists, axisNone, dtypeNone, outNone, ddof0, keepdimsnp._NoValue) print("方差&#xff1a;",lists_var) lists_s…

数据分析应用统计学之分散性与变异性的测量【极差、四分位差、偏态系数、峰态系数、统计指标】

文章目录 1、极差与四分位差&#xff08;R&#xff09;2、方差与标准差&#xff08;西格玛、V&#xff09;3、偏态系数与峰态系数&#xff08;SK、β&#xff09;4、统计指标类型 1、极差与四分位差&#xff08;R&#xff09; 1&#xff09;极差&#xff1a;称为全距&#xff…

偏态数据的观察、量化评估与处理前后的对比

在机器学习中&#xff0c;模型更容易从具有正态分布特性的数据中学习到有用特征。但我们经常会发现有些特征存在长尾分布&#xff0c;对于这种偏态分布数据&#xff0c;需要进行特殊的处理&#xff0c;本文首先观察特征分布情况&#xff0c;然后以量化的方式评估数据偏态程度从…

统计学学习日记:L7-离散趋势分析之偏态和峰态

一、偏态&#xff08;SK&#xff09; 1.数据偏斜程度的测度 偏态系数0为对称分布 偏态系数>0为右偏分布 偏态系数<0为左偏分布 偏态系数>1或<-1&#xff0c;被称为高度偏态分布&#xff1b;偏态系数在0.5~1或-1~-0.5之间&#xff0c;被认为是中等偏态分布&#xf…

如何处理偏态数据?

这是笔试/面试题系列的第2篇文章 在了解何为偏态数据前&#xff0c;要先从正态数据说起。 正态分布 正态分布是自然界中广泛存在的&#xff0c;我们都知道它是两头低&#xff0c;中间高&#xff0c;整个形态呈现对称钟形的一个分布&#xff0c;之所以叫正态分布&#xff0c;是…

skewness and kurtosis偏态和峰度的解释和演示、数据的偏度和峰度——df.skew()、df.kurt()

skewness (偏态) 正偏态分布(positive skewness distribution)是指频数分布的高峰偏于左侧&#xff0c;偏态系数为正值的频数分布形态。偏态分布分为正偏态和负偏态。当均值大于众数时称为正偏态&#xff1b;当均值小于众数时称为负偏态。 定义上偏度是样本的三阶标准化矩&am…

Uniapp中onShow()的应用

遇到问题&#xff1a; 在使用一些变量进行判断时&#xff0c;用完一次开始下一次判断时&#xff0c;结果会跟前一次一样&#xff0c;比如门禁中第一个房子打开后&#xff0c;切换到另外的房子&#xff0c;结果返回结果跟第一个房子一样。 原因分析&#xff1a; 用于使用了相…

uni中onLoad与onShow周期的区别

一、说明 页面周期参考网址&#xff1a;https://uniapp.dcloud.io/tutorial/page.html#lifecycle 二、通俗概括 1. onLoad先执行&#xff0c;onShow后执行 onLoad() {console.log(111); }, onShow(){console.log(222); },2. onLoad只执行一次&#xff0c;onShow监听页面可执…

uni-app小程序onShow执行两次;微信小程序onShow重复执行原因;导航栏tabBar页的onLoad函数不执行;App.vue页的onShow执行原因;onShow莫名其妙执行

1.只有五种情况会触发导航栏tabBar页的onLoad函数&#xff0c;分别是&#xff1a; –1.1&#xff1a;首次进入到导航栏tabBar页面&#xff1b; –1.2&#xff1a;从微信分享进入的导航栏tabBar页面&#xff1b; –1.3&#xff1a;识别二维码跳转到小程序的导航栏tabBar页面&…

自定义组件中,使用onLoad,onShow生命周期失效问题

的解决方法 自定义组件中&#xff0c;使用onLoad,onShow生命周期失效问题 自定义组件中&#xff0c;使用onLoad,onShow生命周期失效问题 官方文档可查阅到&#xff1a; 页面生命周期仅在page中的vue页面有效&#xff0c;而单独封装的组件中【页面周期无效】&#xff0c;但是Vu…

微信小程序onTabItemTap和onShow的执行顺序

很显然 onShow的执行顺序要比 onTabItemTap早 onTabItemTap的特性是只在当前tabbar页面生效&#xff0c;比如onTabItemTap写在home页面&#xff0c;那么只有点击了tabbar上的home才会执行。 那是否有办法让onTabItemTap早于onShow先执行那&#xff1f;经过测试找到2种办法 方…

页面生命周期onShow没有触发

现象描述&#xff1a; 通过router.push接口跳转到快应用的B页面&#xff0c;当B页面只是引用一个自定义组件XX的时候&#xff0c;B页面的onShow生命周期无法触发。如下图所示&#xff1a; 代码如下&#xff1a; B页面代码&#xff1a; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 …