1. 程式人生 > >分類器評價指標--ROC曲線及AUC值

分類器評價指標--ROC曲線及AUC值

ROC和AUC介紹以及如何計算AUC

ROC(Receiver Operating Characteristic)曲線和AUC常被用來評價一個二值分類器(binary classifier)的優劣,對兩者的簡單介紹見這裡。這篇博文簡單介紹ROC和AUC的特點,以及更為深入地,討論如何作出ROC曲線圖以及計算AUC。

ROC曲線

需要提前說明的是,我們這裡只討論二值分類器。對於分類器,或者說分類演算法,評價指標主要有precision,recall,F-score1,以及我們今天要討論的ROC和AUC。下圖是一個ROC曲線的示例2

ROC曲線示例

正如我們在這個ROC曲線的示例圖中看到的那樣,ROC曲線的橫座標為false positive rate(FPR),縱座標為true positive rate(TPR)。下圖中詳細說明了FPR和TPR是如何定義的。

FPR和TPR定義

接下來我們考慮ROC曲線圖中的四個點和一條線。第一個點,(0,1),即FPR=0, TPR=1,這意味著FN(false negative)=0,並且FP(false positive)=0。Wow,這是一個完美的分類器,它將所有的樣本都正確分類。第二個點,(1,0),即FPR=1,TPR=0,類似地分析可以發現這是一個最糟糕的分類器,因為它成功避開了所有的正確答案。第三個點,(0,0),即FPR=TPR=0,即FP(false positive)=TP(true positive)=0,可以發現該分類器預測所有的樣本都為負樣本(negative)。類似的,第四個點(1,1),分類器實際上預測所有的樣本都為正樣本。經過以上的分析,我們可以斷言,ROC曲線越接近左上角,該分類器的效能越好。

下面考慮ROC曲線圖中的虛線y=x上的點。這條對角線上的點其實表示的是一個採用隨機猜測策略的分類器的結果,例如(0.5,0.5),表示該分類器隨機對於一半的樣本猜測其為正樣本,另外一半的樣本為負樣本。

如何畫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)區間3

假如我們已經得到了所有樣本的概率輸出(屬於正樣本的概率),現在的問題是如何改變“discrimination threashold”?我們根據每個測試樣本屬於正樣本的概率值從大到小排序。下圖是一個示例,圖中共有20個測試樣本,“Class”一欄表示每個測試樣本真正的標籤(p表示正樣本,n表示負樣本),“Score”表示每個測試樣本屬於正樣本的概率4

按照概率排序

接下來,我們從高到低,依次將“Score”值作為閾值threshold,當測試樣本屬於正樣本的概率大於或等於這個threshold時,我們認為它為正樣本,否則為負樣本。舉例來說,對於圖中的第4個樣本,其“Score”值為0.6,那麼樣本1,2,3,4都被認為是正樣本,因為它們的“Score”值都大於等於0.6,而其他樣本則都認為是負樣本。每次選取一個不同的threshold,我們就可以得到一組FPR和TPR,即ROC曲線上的一點。這樣一來,我們一共得到了20組FPR和TPR的值,將它們畫在ROC曲線的結果如下圖:

ROC曲線舉例

當我們將threshold設定為1和0時,分別可以得到ROC曲線上的(0,0)和(1,1)兩個點。將這些(FPR,TPR)對連線起來,就得到了ROC曲線。當threshold取值越多,ROC曲線越平滑。

其實,我們並不一定要得到每個測試樣本是正樣本的概率值,只要得到這個分類器對該測試樣本的“評分值”即可(評分值並不一定在(0,1)區間)。評分越高,表示分類器越肯定地認為這個測試樣本是正樣本,而且同時使用各個評分值作為threshold。我認為將評分值轉化為概率更易於理解一些。

AUC值的計算

AUC(Area Under Curve)被定義為ROC曲線下的面積,顯然這個面積的數值不會大於1。又由於ROC曲線一般都處於y=x這條直線的上方,所以AUC的取值範圍在0.5和1之間。使用AUC值作為評價標準是因為很多時候ROC曲線並不能清晰的說明哪個分類器的效果更好,而作為一個數值,對應AUC更大的分類器效果更好。

在瞭解了ROC曲線的構造過程後,編寫程式碼實現並不是一件困難的事情。相比自己編寫程式碼,有時候閱讀其他人的程式碼收穫更多,當然過程也更痛苦些。在此推薦scikit-learn中關於計算AUC的程式碼

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值越大,當前的分類演算法越有可能將正樣本排在負樣本前面,即能夠更好的分類。

為什麼使用ROC曲線

既然已經這麼多評價標準,為什麼還要使用ROC和AUC呢?因為ROC曲線有個很好的特性:當測試集中的正負樣本的分佈變化的時候,ROC曲線能夠保持不變。在實際的資料集中經常會出現類不平衡(class imbalance)現象,即負樣本比正樣本多很多(或者相反),而且測試資料中的正負樣本的分佈也可能隨著時間變化。下圖是ROC曲線和Precision-Recall曲線5的對比:

ROC曲線 vs. Precision-Recall曲線

在上圖中,(a)和(c)為ROC曲線,(b)和(d)為Precision-Recall曲線。(a)和(b)展示的是分類其在原始測試集(正負樣本分佈平衡)的結果,(c)和(d)是將測試集中負樣本的數量增加到原來的10倍後,分類器的結果。可以明顯的看出,ROC曲線基本保持原貌,而Precision-Recall曲線則變化較大。

說明,文中除了第一張圖來自Wikipedia外,其他的圖都來自論文(Fawcett, 2006)6截圖.

引用及其他連結:

  • 維基百科中對ROC的介紹: http://en.wikipedia.org/wiki/Receiver_operating_characteristic
  • ROC曲線及AUC評價指標 by 冒泡的崔:http://bubblexc.com/y2011/148/
  1. 我避免將precision,recall等評價指標翻譯成中文,因為它們可能對應多箇中文解釋,極易產生混淆。 

  2. 圖片來源:http://en.wikipedia.org/wiki/File:Roccurves.png 

  3. 這種對映不一定都是可靠的,即你不一定真的得到了某個樣本是正樣本的概率。 

  4. 注意這裡使用了“Score”,而不是概率,我們暫且可以認為“Score”值就是是正樣本的概率。 

  5. Davis, J., & Goadrich, M. (2006, June). The relationship between Precision-Recall and ROC curves. In Proceedings of the 23rd international conference on Machine learning (pp. 233-240). ACM. 

  6. (Fawcett, 2006),Fawcett, T. (2006). An introduction to ROC analysis. Pattern recognition letters, 27(8), 861-874.