AUC

牧云@^-^@ 提交于 2020-07-26 15:29:13

AUC: Area Under Curve, 默认为ROC(receiver operating characteristic curve) Curve, 也可以指定PR(Precision Recall) curve。

由于ROC曲线的X轴为False Positive Rate,Y轴为True Positive Rate,AUC是可以指 随机给定一个正样本和一个负样本,分类器输出该正样本为正的 比 输出该负样本为正 要大的概率,即 AUC = P(P_tpr > P_fpr).

AUC的计算方法:

在有M个正样本,N个负样本的数据集里。一共可构成 MN 个样本对(一对样本即,一个正样本与一个负样本)。统计这MN对样本里,正样本的预测概率大于负样本的预测概率的个数。
A U C = ∑ i ∈  positiveclass  rank ⁡ i − M ( 1 + M ) 2 M × N A U C=\frac{\sum_{i \in \text { positiveclass }} \operatorname{rank}_{i}-\frac{M(1+M)}{2}}{M \times N} AUC=M×Ni positiveclass ranki2M(1+M)

def AUC(label, pre):
  #计算正样本和负样本的索引,以便索引出之后的概率值
    pos = [i for i in range(len(label)) if label[i] == 1]
    neg = [i for i in range(len(label)) if label[i] == 0]
 
    auc = 0
    for i in pos:
        for j in neg:
            if pre[i] > pre[j]:
                auc += 1
            elif pre[i] == pre[j]:
                auc += 0.5
 
    return auc / (len(pos)*len(neg))
 
 
if __name__ == '__main__':
    label = [1,0,0,0,1,0,1,0]
    pre = [0.9, 0.8, 0.3, 0.1, 0.4, 0.9, 0.66, 0.7]
    print(AUC(label, pre))
 
    from sklearn.metrics import roc_curve, auc
    fpr, tpr, th = roc_curve(label, pre , pos_label=1)
    print('sklearn', auc(fpr, tpr))

1、多分类可以计算AUC吗?

​ 可以。通过one VS rest可以得到M个AUC,最后求均值。

2、AUC的阈值怎么选取最佳?

​ 曲线靠近左上角对应的阈值最佳,代表TPR大于FPR的最大机会。

3、类别不平衡对AUC_roc和AUC_pr哪个影响大?

ROC不受训练集类别分布的影响

References:

1、 AUC的计算方法

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!