摘要:
1.什么是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 |
同样本是4个样本对,对于样本对(C,B)其I值为0.5。
,代表第i条样本的序号。(概率得分从小到大排,排在第rank个位置)
分别是正样本的个数和负样本的个数
只把正样本的序号加起来。
| 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 |
按照上面的公式,只把正样本的序号加起来也就是只把样本C,D的rank值加起来后减去一个常数项
,这个答案和我们上面所计算的是一样的。
| 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 |
在这个例子中,我们有4个取值概率为0.5,而且既有正样本也有负样本的情况。计算的时候,其实原则就是相等得分的rank取平均值。具体来说如下:
| 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.最后的最后,如何用程序验证?
为了方便,我们使用sk-learn里面自带的库来简单的验证一下我们的例子。
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)
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/175715.html原文链接:https://javaforall.net
