情景:二分類模型在驗證集上的 outputs 為 [[-0.0464, -0.0268], [-0.0234, -0.0091]],驗證集 labels 為 [0, 1]。一步一步推匯出 AUC。
- 首先明確幾個概念
-
TPR: sensitive/recall,檢測出來的陽性樣本的佔比,適用於癌症篩查
-
FPR:模型是否把所有的陰性樣本都預測成了陽性
👉極限情況1:TPR = 1 & FPR = 1,說明模型把所有樣本都預測成了陽性(包含兩個含義:對於陽性樣本,模型都能檢出;但對於陰性樣本,模型都判斷錯誤)。但顯然,這種情況下,那些未患病的被試(陰性樣本)會經歷沒必要的檢查,所以不應該鼓勵模型把所有樣本都預測成陽性。
👉極限情況2:TPR = 0 & FPR = 0,說明模型把所有樣本都預測成了陰性(同樣包含兩個含義:沒有無辜的被試受模型所害,但真正患病的被試也被模型漏掉了)。這樣一來,模型也失去了診斷價值,白白浪費被試們的時間。實際臨床應用中,應該根據實際需求選擇偏重提高TPR還是降低FPR。 -
AUC 值為 ROC 曲線下面積:ROC 曲線圖的橫座標為 FPR,縱座標為 TPR,根據不同閾值下的 [FPR, TPR] 點對 ROC 曲線進行繪製。結合上面的兩種極限情況,ideal的 ROC 曲線會先後經過(0, 0)、(0, 1)、(1, 1)三個點,代表對於所有的閾值,FPR 都等於0,同時 TPR 都等於1。在實際情況中,越接近於左上角的 ROC 曲線越理想。
- 計算AUC
-
將outputs透過Softmax先轉換成機率分佈(參考我們的另一篇文章),得到 [[0.4955, 0.5045], [0.4977, 0.5023]]。
-
將 outputs 看成 one-hot 格式,得到預測樣本為正類(1)對應的的機率是:[0.5045, 0.5023]。
-
將 [0.5045, 0.5023] 作為兩個閾值,討論當閾值分別為 ∞、0.5045 和 0.5023 時,正負樣本的預測情況。
-
閾值的作用
在二分類問題中,模型輸出的分數通常表示樣本屬於正類的機率或相關性。我們可以透過設定不同的閾值來決定樣本是被預測為正類還是負類:如果預測分數高於/等於閾值(sklearn.metrics.roc_curve),我們將樣本分類為正類;如果預測分數低於閾值,我們將樣本分類為負類。 -
具體過程如下
1> 閾值為 ∞ 時,兩個樣本均為負類。
2> 閾值為 0.5045 時,第一個樣本:分數為 0.5045,等於閾值,所以預測為正類;第二個樣本:分數為 0.5023,低於閾值,所以預測為負類。
3> 閾值為 0.5023 時,第一個樣本:分數為 0.5045,高於閾值,所以預測為正類;第二個樣本:分數為 0.5023,等於閾值,所以預測為正類。
-
-
計算不同閾值下的 TPR、FPR 分別是多少(真實標籤為 [0, 1])
1> 閾值為 ∞ 時,預測標籤為 [0, 0],TPR=0,FPR=0。
2> 閾值為 0.5045 時,預測標籤為 [1, 0],TPR=0,FPR=1。
2> 閾值為 0.5023 時,預測標籤為 [1, 1],TPR=1,FPR=1。 -
根據上面的三個點繪製 ROC 曲線(橫座標:FPR,縱座標:TPR),根據閾值從大到小,三個點分別為(0, 0)、(1, 0)、(1, 1)。
-
繪製出的 ROC 曲線的曲線下面積為 0, 所以 AUC=0。
⭐只有在多分類問題下面,討論 macro / micro / weighted AUC 的區別才有意義。因為如果是二分類問題,只會有一組正類和負類、一條ROC曲線。計算普通的 average/macro AUC 即可。多分類問題下,每個正類都畫一條 ROC 曲線,然後選擇不同的方法(macro / micro / weighted),得到最終多分類的 ROC 曲線,從而計算 AUC。