https://zhwhong.cn/2017/04/14/ROC-AUC-Precision-Recall-analysis/
在分類任務中,人們總是喜歡基於錯誤率來衡量分類器任務的成功程度。錯誤率指的是在所有測試樣例中錯分的樣例比例。實際上,這樣的度量錯誤掩蓋了樣例如何被分錯的事實。在機器學習中,有一個普遍適用的稱為混淆矩陣(confusion matrix)的工具,它可以幫助人們更好地了解分類中的錯誤。
比如有這樣一個在房子周圍可能發現的動物類型的預測,這個預測的三類問題的混淆矩陣如下表所示:
利用混淆矩陣可以充分理解分類中的錯誤了。如果混淆矩陣中的非對角線元素均為0,就會得到一個近乎完美的分類器。
在接下來的討論中,將以經典的二分類問題為例,對於多分類類比推斷。
二分類問題在機器學習中是一個很常見的問題,經常會用到。ROC (Receiver Operating Characteristic) 曲線和 AUC (Area Under the Curve) 值常被用來評價一個二值分類器 (binary classifier) 的優劣。之前做醫學圖像計算機輔助肺結節檢測時,在評定模型預測結果時,就用到了ROC和AUC,這里簡單介紹一下它們的特點,以及更為深入地,討論如何作出ROC曲線圖和計算AUC值。
一、醫學圖像識別二分類問題
針對一個二分類問題,我們將實例分成正類(positive)和負類(negative)兩種。
例如:在肺結節計算機輔助識別這一問題上,一幅肺部CT圖像中有肺結節被認為是陽性(positive),沒有肺結節被認為是陰性(negative)。對於部分有肺結節的示意圖如下:
所以在實際檢測時,就會有如下四種情況:
(1) 真陽性(True Positive,TP):檢測有結節,且實際有結節;正確肯定的匹配數目;
(2) 假陽性(False Positive,FP):檢測有結節,但實際無結節;誤報,給出的匹配是不正確的;
(3) 真陰性(True Negative,TN):檢測無結節,且實際無結節;正確拒絕的非匹配數目;
(4) 假陰性(False Negative,FN):檢測無結節,但實際有結節;漏報,沒有正確找到的匹配的數目。
詳細圖解(原創,轉載請標明出處)如下:
上圖中涉及到很多相關概念及參數,詳細請見Wiki上的定義及其混淆矩陣。
這里整理肺結節識別中的幾個主要參數指標如下:
- 正確率(Precision):
- 真陽性率(True Positive Rate,TPR),靈敏度(Sensitivity),召回率(Recall):
- 真陰性率(True Negative Rate,TNR),特異度(Specificity):
- 假陰性率(False Negatice Rate,FNR),漏診率( = 1 - 靈敏度):
- 假陽性率(False Positice Rate,FPR),誤診率( = 1 - 特異度):
- 陽性似然比(Positive Likelihood Ratio (LR+)):
- 陰性似然比(Negative Likelihood Ratio (LR−) ):
- Youden指數(Youden index):
二、ROC曲線
ROC曲線:接收者操作特征曲線(receiver operating characteristic curve),是反映敏感性和特異性連續變量的綜合指標,roc曲線上每個點反映着對同一信號刺激的感受性。
對於分類器或者說分類算法,評價指標主要有precision,recall,F1 score等,以及這里要討論的ROC和AUC。下圖是一個ROC曲線的示例:
- 橫坐標:1-Specificity,偽正類率(False positive rate, FPR),預測為正但實際為負的樣本占所有負例樣本 的比例;
- 縱坐標:Sensitivity,真正類率(True positive rate, TPR),預測為正且實際為正的樣本占所有正例樣本 的比例。
在一個二分類模型中,假設采用邏輯回歸分類器,其給出針對每個實例為正類的概率,那么通過設定一個閾值如0.6,概率大於等於0.6的為正類,小於0.6的為負類。對應的就可以算出一組(FPR,TPR),在平面中得到對應坐標點。隨着閾值的逐漸減小,越來越多的實例被划分為正類,但是這些正類中同樣也摻雜着真正的負實例,即TPR和FPR會同時增大。閾值最大時,對應坐標點為(0,0),閾值最小時,對應坐標點(1,1)。
如下面這幅圖,(a)圖中實線為ROC曲線,線上每個點對應一個閾值。
(a) 理想情況下,TPR應該接近1,FPR應該接近0。ROC曲線上的每一個點對應於一個threshold,對於一個分類器,每個threshold下會有一個TPR和FPR。比如Threshold最大時,TP=FP=0,對應於原點;Threshold最小時,TN=FN=0,對應於右上角的點(1,1)。
(b) P和N得分不作為特征間距離d的一個函數,隨着閾值theta增加,TP和FP都增加。
- 橫軸FPR:1-TNR,1-Specificity,FPR越大,預測正類中實際負類越多。
- 縱軸TPR:Sensitivity(正類覆蓋率),TPR越大,預測正類中實際正類越多。
- 理想目標:TPR=1,FPR=0,即圖中(0,1)點,故ROC曲線越靠攏(0,1)點,越偏離45度對角線越好,Sensitivity、Specificity越大效果越好。
隨着閾值threshold調整,ROC坐標系里的點如何移動可以參考:
三、如何畫ROC曲線
對於一個特定的分類器和測試數據集,顯然只能得到一個分類結果,即一組FPR和TPR結果,而要得到一個曲線,我們實際上需要一系列FPR和TPR的值,這又是如何得到的呢?我們先來看一下Wikipedia上對ROC曲線的定義:
In signal detection theory, a receiver operating characteristic (ROC), or simply ROC curve, is a graphical plot which illustrates the performance of a binary classifier system as its discrimination threshold is varied.
問題在於“as its discrimination threashold is varied”。如何理解這里的“discrimination threashold”呢?我們忽略了分類器的一個重要功能“概率輸出”,即表示分類器認為某個樣本具有多大的概率屬於正樣本(或負樣本)。通過更深入地了解各個分類器的內部機理,我們總能想辦法得到一種概率輸出。通常來說,是將一個實數范圍通過某個變換映射到(0,1)區間。
假如我們已經得到了所有樣本的概率輸出(屬於正樣本的概率),現在的問題是如何改變“discrimination threashold”?我們根據每個測試樣本屬於正樣本的概率值從大到小排序。下圖是一個示例,圖中共有20個測試樣本,“Class”一欄表示每個測試樣本真正的標簽(p表示正樣本,n表示負樣本),“Score”表示每個測試樣本屬於正樣本的概率。
接下來,我們從高到低,依次將“Score”值作為閾值threshold,當測試樣本屬於正樣本的概率大於或等於這個threshold時,我們認為它為正樣本,否則為負樣本。舉例來說,對於圖中的第4個樣本,其“Score”值為0.6,那么樣本1,2,3,4都被認為是正樣本,因為它們的“Score”值都大於等於0.6,而其他樣本則都認為是負樣本。每次選取一個不同的threshold,我們就可以得到一組FPR和TPR,即ROC曲線上的一點。這樣一來,我們一共得到了20組FPR和TPR的值,將它們畫在ROC曲線的結果如下圖:
當我們將threshold設置為1和0時,分別可以得到ROC曲線上的(0,0)和(1,1)兩個點。將這些(FPR,TPR)對連接起來,就得到了ROC曲線。當threshold取值越多,ROC曲線越平滑。
其實,我們並不一定要得到每個測試樣本是正樣本的概率值,只要得到這個分類器對該測試樣本的“評分值”即可(評分值並不一定在(0,1)區間)。評分越高,表示分類器越肯定地認為這個測試樣本是正樣本,而且同時使用各個評分值作為threshold。我認為將評分值轉化為概率更易於理解一些。
四、AUC
AUC值的計算
AUC (Area Under Curve) 被定義為ROC曲線下的面積,顯然這個面積的數值不會大於1。又由於ROC曲線一般都處於y=x這條直線的上方,所以AUC的取值范圍一般在0.5和1之間。使用AUC值作為評價標准是因為很多時候ROC曲線並不能清晰的說明哪個分類器的效果更好,而作為一個數值,對應AUC更大的分類器效果更好。
AUC的計算有兩種方式,梯形法和ROC AUCH法,都是以逼近法求近似值,具體見wikipedia。
AUC意味着什么
那么AUC值的含義是什么呢?根據(Fawcett, 2006),AUC的值的含義是:
The AUC value is equivalent to the probability that a randomly chosen positive example is ranked higher than a randomly chosen negative example.
這句話有些繞,我嘗試解釋一下:首先AUC值是一個概率值,當你隨機挑選一個正樣本以及一個負樣本,當前的分類算法根據計算得到的Score值將這個正樣本排在負樣本前面的概率就是AUC值。當然,AUC值越大,當前的分類算法越有可能將正樣本排在負樣本前面,即能夠更好的分類。
從AUC判斷分類器(預測模型)優劣的標准:
- AUC = 1,是完美分類器,采用這個預測模型時,存在至少一個閾值能得出完美預測。絕大多數預測的場合,不存在完美分類器。
- 0.5 < AUC < 1,優於隨機猜測。這個分類器(模型)妥善設定閾值的話,能有預測價值。
- AUC = 0.5,跟隨機猜測一樣(例:丟銅板),模型沒有預測價值。
- AUC < 0.5,比隨機猜測還差;但只要總是反預測而行,就優於隨機猜測。
三種AUC值示例:
簡單說:AUC值越大的分類器,正確率越高。
為什么使用ROC曲線
既然已經這么多評價標准,為什么還要使用ROC和AUC呢?因為ROC曲線有個很好的特性:當測試集中的正負樣本的分布變化的時候,ROC曲線能夠保持不變。在實際的數據集中經常會出現類不平衡(class imbalance)現象,即負樣本比正樣本多很多(或者相反),而且測試數據中的正負樣本的分布也可能隨着時間變化。下圖是ROC曲線和Precision-Recall曲線的對比:
在上圖中,(a)和(c)為ROC曲線,(b)和(d)為Precision-Recall曲線。(a)和(b)展示的是分類其在原始測試集(正負樣本分布平衡)的結果,(c)和(d)是將測試集中負樣本的數量增加到原來的10倍后,分類器的結果。可以明顯的看出,ROC曲線基本保持原貌,而Precision-Recall曲線則變化較大。
Reference
- Wikipedia:Receiver operating characteristic
- 孔明的博客:ROC和AUC介紹以及如何計算AUC
- Rachel Zhang的專欄(CSDN):ROC曲線-閾值評價標准
- 博客園dzl_ML:機器學習之分類器性能指標之ROC曲線、AUC值
- 知乎:精確率、召回率、F1 值、ROC、AUC 各自的優缺點是什么?