AUC及其計算
阿新 • • 發佈:2020-11-01
概念
AUC(Area Under Curve)被定義為ROC曲線下與座標軸圍成的面積,顯然這個面積的數值不會大於1。又由於ROC曲線一般都處於y=x這條直線的上方,所以AUC的取值範圍在0.5和1之間。AUC越接近1.0,檢測方法真實性越高;等於0.5時,則真實性最低,無應用價值.
AUC:(ROC曲線下方的面積大小)
參考:百度百科
含義理解二 : AUC(are under curve)是一個模型的評價指標,用於分類任務。
那麼這個指標代表什麼呢?這個指標想表達的含義,簡單來說其實就是隨機抽出一對樣本(一個正樣本,一個負樣本),然後用訓練得到的分類器來對這兩個樣本進行預測,預測得到正樣本的概率大於負樣本概率的概率。
參考
AUC的計算方法
-
方法一 : 定義計算 -> 計算面積 -> 不好實現
-
方法二: 從概率的角度進行實現
有如下公式:
公式解釋:
首先對score從大到小排序,然後令最大score對應的sample 的rank為n,第二大score對應sample的rank為n-1,以此類推。然後把所有的正類樣本的rank相加,再減去M-1種兩個正樣本組合的情況。得到的就是所有的樣本中有多少對正類樣本的score大於負類樣本的score。然後再除以M×N
程式碼實現:
import numpy as np def calculate_auc(y, p): ''' y: 真實Label的向量 ndarray p: 預測為正例的概率的向量 ndarray ''' # 保證相同概率的0排在1前面 tmp = np.array(sorted(zip(y, p), key=lambda x:(x[1], -x[0]), reverse=True)) neg = 0 pos = 0 for i in y: if i == 0: neg += 1 elif i == 1: pos += 1 loss = 0 neglst = np.array([]) for i in range(len(tmp)): if tmp[i][0] == 1: loss += np.sum(neglst == tmp[i][1]) / 2 + np.sum(neglst != tmp[i][1]) else: neglst = np.append(neglst, tmp[i][1]) return 1 - loss / (neg*pos)
參考:
https://blog.csdn.net/lieyingkub99/article/details/81266664
https://blog.csdn.net/renzhentinghai/article/details/81095857
時間匆匆,簡單記錄~