欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

AUC

程序员文章站 2024-02-10 15:47:40
...

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

AUC

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

AUC的计算方法:

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

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的计算方法