1. 程式人生 > >【機器學習】分類效能度量指標 : ROC曲線、AUC值、正確率、召回率、敏感度、特異度

【機器學習】分類效能度量指標 : ROC曲線、AUC值、正確率、召回率、敏感度、特異度

在分類任務中,人們總是喜歡基於錯誤率來衡量分類器任務的成功程度。錯誤率指的是在所有測試樣例中錯分的樣例比例。實際上,這樣的度量錯誤掩蓋了樣例如何被分錯的事實。在機器學習中,有一個普遍適用的稱為混淆矩陣(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上的

定義及其混淆矩陣

wiki混淆矩陣

這裡整理肺結節識別中的幾個主要引數指標如下:

Precision=TPTP+FP Sensitivity=Recall=TPR=TPTP+FN Specificity=TNR=TNFP+TN
  • 假陰性率(False Negatice Rate,FNR),漏診率( = 1 - 靈敏度):
FNR=FNTP+FN
  • 假陽性率(False Positice Rate,FPR),誤診率( = 1 - 特異度):
FPR=FPFP+TN LR+=TPRFPR=Sensitivity1Specificity LR=FNRTNR=1SensitivitySpecificity Youden index=Sensitivity+Specificity1=TPRFPR

二、ROC曲線

ROC曲線:接收者操作特徵曲線(receiver operating characteristic curve),是反映敏感性和特異性連續變數的綜合指標,roc曲線上每個點反映著對同一訊號刺激的感受性。

對於分類器或者說分類演算法,評價指標主要有precisionrecallF1 score等,以及這裡要討論的ROCAUC。下圖是一個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曲線,線上每個點對應一個閾值。

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

(在此對以上博文的博主表示感謝!)