Python計算AUC


AUC(Area under curve)是機器學習常用的二分類評測手段,直接含義是ROC曲線下的面積。另一種解釋是:隨機抽出一對樣本(一個正樣本,一個負樣本),然后用訓練得到的分類器來對這兩個樣本進行預測,預測得到正樣本的概率大於負樣本概率的概率。
在有M個正樣本,N個負樣本的數據集里,利用公式求解:

\[AUC=\frac{\sum_{i \in positiveClass} rank_i-\frac{M(1+M)}{2}}{M*N} \]

在python實現中,相當於使用了計數排序,因為概率是一個小數,我們同時乘以100取整數進行排序(也可以根據精度調整)。在排完序后,我們就可以得到正樣本概率大於負樣本概率的個數,再加上正樣本概率等於負樣本概率的個數的一半,除以總共的樣本數(M*N),即可得到最終的AUC值。

def AUC(labels,preds,n_bins=100):
    m = sum(labels)
    n = len(labels) - m
    total_case = m * n
    pos = [0 for _ in range(n_bins)]
    neg = [0 for _ in range(n_bins)]
    bin_width = 1.0 / n_bins
    for i in range(len(labels)):
        nth_bin = int(preds[i]/bin_width)
        if labels[i]==1:
            pos[nth_bin] += 1
        else:
            neg[nth_bin] += 1
    accumulated_neg = 0
    satisfied_pair = 0
    for i in range(n_bins):
        satisfied_pair += (pos[i]*accumulated_neg + pos[i]*neg[i]*0.5)
        accumulated_neg += neg[i]
    return satisfied_pair / total_case

y = [1,0,0,0,1,0,1,0,]
pred = [0.9, 0.8, 0.3, 0.1,0.4,0.9,0.6,0.7]
print(AUC(y, pred, n_bins=100))

作為機器學習中的經典評價准則,AUC的計算也作為面試筆試常考的算法題。

參考:
AUC詳解與python實現


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM