AUC计算方法总结

摘要:

在机器学习的分类任务中,我们常用许多的指标,诸如召回率(Recall)、准确率(Precision)、F1值、AUC等。

那么,如果手动计算AUC应该要怎么计算呢?相信大家很多时候都是用写好的库直接计算,可能对AUC计算不太了解,下面这篇文章就简单的概述一下AUC的计算方法。

(注:本文的重点其实不在于阐述什么是AUC。因为网上关于这方面的文章实在太多了。但是对于AUC的计算的文章相对来说少一些)

 

1.什么是AUC?

相信这个问题很多玩家都已经明白了,简单的概括一下,AUC(are under curve)是一个模型的评价指标,用于分类任务。

那么这个指标代表什么呢?这个指标想表达的含义,简单来说其实就是随机抽出一对样本(一个正样本,一个负样本),然后用训练得到的分类器来对这两个样本进行预测,预测得到正样本的概率大于负样本概率的概率。

 

 

具体关于AUC含义的分析推荐以下回答:

 

AUC如何理解?

 

2.如何计算AUC?

计算AUC时,推荐2个方法。

方法一:

在有M个正样本,N个负样本的数据集里。一共有M*N对样本(一对样本即,一个正样本与一个负样本)。统计这M*N对样本里,正样本的预测概率大于负样本的预测概率的个数。

,其中,

 

 

这样说可能有点抽象,我举一个例子便能够明白。

 

 

IDlabelpro
A00.1
B00.4
C10.35
D10.8

假设有4条样本。2个正样本,2个负样本,那么M*N=4。即总共有4个样本对。分别是:

(D,B),(D,A),(C,B),(C,A)。

在(D,B)样本对中,正样本D预测的概率大于负样本B预测的概率(也就是D的得分比B高),记为1

同理,对于(C,B)。正样本C预测的概率小于负样本C预测的概率,记为0.

最后可以算得,总共有3个符合正样本得分高于负样本得分,故最后的AUC为

 

在这个案例里,没有出现得分一致的情况,假如出现得分一致的时候,例如:

 

IDlabelpro
A00.1
B00.4
C10.4
D10.8


同样本是4个样本对,对于样本对(C,B)其I值为0.5。

最后的AUC为

 

 

方法二:

另外一个方法就是利用下面的公式:

 

这个公式看起来有点吓人,首先解释一下每一个符号的意思:

公式的含义见:公式解释

 

,代表第i条样本的序号。(概率得分从小到大排,排在第rank个位置)

分别是正样本的个数和负样本的个数

只把正样本的序号加起来。

从小到大排序后,第一个正样本的位置(序号,序号从0开始),就是其比负样本得分大的个数;对于第二个正样本,前面有已经1个正样本了,所以负样本个数为位置减去1,同理,第三个正样本前面的负样本个数为位置减去2,……,对于第M个正样本,匹配的负样本个数为位置序号减去M-1。 故而,分子就变成 所有正样本的位置序号和,减去(0+1+2+……+M-1)=sum()-M*(M-1)/2. 若序号从1开始,则,=sum()-M -(0+1+2+……+M-1)=sum()-M(M+1)/2.

 

同样本地,我们用上面的例子。

 

IDlabelpro
A00.1
B00.4
C10.35
D10.8

 将这个例子排序。按概率排序后得到:

 

IDlabelprorank
A00.11
C10.352
B00.43
D10.84


按照上面的公式,只把正样本的序号加起来也就是只把样本C,D的rank值加起来后减去一个常数项

 

即:,这个答案和我们上面所计算的是一样的。

 

这个时候,我们有个问题,假如出现得分一致的情况怎么办?下面举一个例子说明:

 

 

IDlabelpro
A10.8
B10.7
C00.5
D00.5
E10.5
F10.5
G00.3


在这个例子中,我们有4个取值概率为0.5,而且既有正样本也有负样本的情况。计算的时候,其实原则就是相等得分的rank取平均值。具体来说如下:

先排序:

IDlabelprorank
G00.31
F10.52
E10.53
D00.54
C00.55
B10.76
A10.87


这里需要注意的是:相等概率得分的样本,无论正负,谁在前,谁在后无所谓。

由于只考虑正样本的rank值:

对于正样本A,其rank值为7

对于正样本B,其rank值为6

对于正样本E,其rank值为(5+4+3+2)/4

对于正样本F,其rank值为(5+4+3+2)/4

最后我们得到:

 

 

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

为了方便,我们使用sk-learn里面自带的库来简单的验证一下我们的例子。

其python的代码

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)

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在求解逻辑回归模型的AUC(Area Under the Curve)得分时,我们需要先进行模型训练和预测,然后根据预测结果计算AUC。 首先,我们以二分类问题为例,假设我们有一个由N个样本组成的数据集,每个样本都有k个特征。首先,我们需要将数据集分为训练集和测试集。接下来,我们使用训练集进行逻辑回归模型的训练,得到模型的参数。 然后,我们使用已训练的模型对测试集进行预测,得到每个样本属于正类的概率。根据这些概率值,我们可以计算出一组正样本和负样本的排列顺序。 之后,我们使用这组排列顺序,计算ROC曲线(Receiver Operating Characteristic curve)上的各个点。ROC曲线是以假阳性率(False Positive Rate)为横轴,真阳性率(True Positive Rate)为纵轴的二维坐标图。AUC就是ROC曲线下方的面积。 为了计算AUC,我们可以使用数值积分方法,如梯形法则。在梯形法则中,整个曲线被划分为多个小梯形,每个小梯形的面积由两个连续点的纵坐标之和的一半乘以两个点之间的横坐标差值得到。 最后,将所有的小梯形的面积相加,即可得到AUC的值。AUC的取值范围为0到1之间,越接近于1代表模型性能越好,越接近于0则代表性能越差。 总结来说,求解逻辑回归模型的AUC需要进行模型训练和预测,然后利用ROC曲线计算AUC。通过AUC的值,我们可以评估逻辑回归模型的性能和预测能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值