1. 程式人生 > >ROC曲線是通過樣本點分類概率畫出的 例如某一個sample預測為1概率為0.6 預測為0概率0.4這樣畫出來,此外如果曲線不是特別平滑的話,那麽很可能存在過擬合的情況

ROC曲線是通過樣本點分類概率畫出的 例如某一個sample預測為1概率為0.6 預測為0概率0.4這樣畫出來,此外如果曲線不是特別平滑的話,那麽很可能存在過擬合的情況

pro TE 直線 算法 false .net ear 明顯 ever

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

from:http://alexkong.net/2013/06/introduction-to-auc-and-roc/

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

ROC曲線

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

技術分享圖片

正如我們在這個ROC曲線的示例圖中看到的那樣,ROC曲線的橫坐標為false positive rate(FPR),縱坐標為true positive rate(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曲線的結果如下圖:

技術分享圖片

當我們將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的對比:

技術分享圖片

在上圖中,(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. ?

ROC曲線是通過樣本點分類概率畫出的 例如某一個sample預測為1概率為0.6 預測為0概率0.4這樣畫出來,此外如果曲線不是特別平滑的話,那麽很可能存在過擬合的情況