天天看點

ROC曲線與AUC值

本文根據以下文章整理而成,連結:

(1)http://blog.csdn.net/ice110956/article/details/20288239

(2)http://blog.csdn.net/chjjunking/article/details/5933105

1.概述

  AUC(Area Under roc Curve)是一種用來度量分類模型好壞的一個标準。這樣的标準其實有很多,例如:大約10年前在machine learning文獻中一統天下的标準:分類精度;在資訊檢索(IR)領域中常用的recall和precision,等等。其實,度量反應了人們對”好”的分類結果的追求,同一時期的不同的度量反映了人們對什麼是”好”這個最根本問題的不同認識,而不同時期流行的度量則反映了人們認識事物的深度的變化。

  近年來,随着machine learning的相關技術從實驗室走向實際應用,一些實際的問題對度量标準提出了新的需求。特别的,現實中樣本在不同類别上的不均衡分布(class distribution imbalance problem)。使得accuracy這樣的傳統的度量标準不能恰當的反應分類器的performance。舉個例子:測試樣本中有A類樣本90個,B 類樣本10個。分類器C1把所有的測試樣本都分成了A類,分類器C2把A類的90個樣本分對了70個,B類的10個樣本分對了5個。則C1的分類精度為 90%,C2的分類精度為75%。但是,顯然C2更有用些。另外,在一些分類問題中犯不同的錯誤代價是不同的(cost sensitive learning)。這樣,預設0.5為分類門檻值的傳統做法也顯得不恰當了。

為了解決上述問題,人們從醫療分析領域引入了一種新的分類模型performance評判方法——ROC分析。ROC分析本身就是一個很豐富的内容,有興趣的讀者可以自行Google,這裡隻做些簡單的概念性的介紹。

  ROC的全名叫做Receiver Operating Characteristic,其主要分析工具是一個畫在二維平面上的曲線——ROC curve。平面的橫坐标是false positive rate(FPR),縱坐标是true positive rate(TPR)。對某個分類器而言,我們可以根據其在測試樣本上的表現得到一個TPR和FPR點對。這樣,此分類器就可以映射成ROC平面上的一個點。調整這個分類器分類時候使用的門檻值,我們就可以得到一個經過(0, 0),(1, 1)的曲線,這就是此分類器的ROC曲線。一般情況下,這個曲線都應該處于(0, 0)和(1, 1)連線的上方。因為(0, 0)和(1, 1)連線形成的ROC曲線實際上代表的是一個随機分類器。如果很不幸,你得到一個位于此直線下方的分類器的話,一個直覺的補救辦法就是把所有的預測結果反向,即:分類器輸出結果為正類,則最終分類的結果為負類,反之,則為正類。雖然,用ROC curve來表示分類器的performance很直覺好用。可是,人們總是希望能有一個數值來标志分類器的好壞。于是Area Under roc Curve(AUC)就出現了。顧名思義,AUC的值就是處于ROC curve下方的那部分面積的大小。通常,AUC的值介于0.5到1.0之間,較大的AUC代表了較好的performance。

2.ROC曲線

2.1ROC的動機

  對于0,1兩類分類問題,一些分類器得到的結果往往不是0,1這樣的标簽,如神經網絡得到諸如0.5,0.8這樣的分類結果。這時,我們人為取一個門檻值,比如0.4,那麼小于0.4的歸為0類,大于等于0.4的歸為1類,可以得到一個分類結果。同樣,這個門檻值我們可以取0.1或0.2等等。取不同的門檻值,最後得到的分類情況也就不同。如下面這幅圖:

ROC曲線與AUC值

  藍色表示原始為負類分類得到的統計圖,紅色表示原始為正類得到的統計圖。那麼我們取一條直線,直線左邊分為負類,直線右邊分為正類,這條直線也就是我們所取的門檻值。門檻值不同,可以得到不同的結果,但是由分類器決定的統計圖始終是不變的。這時候就需要一個獨立于門檻值,隻與分類器有關的評價名額,來衡量特定分類器的好壞。還有在類不平衡的情況下,如正樣本有90個,負樣本有10個,直接把所有樣本分類為正樣本,得到識别率為90%,但這顯然是沒有意義的。如上就是ROC曲線的動機。

2.2ROC的定義

  關于兩類分類問題,原始類為positive、negative,分類後的類别為p'、n'。排列組合後得到4種結果,如下圖所示:

ROC曲線與AUC值

  于是我們得到四個名額,分别為:真陽、僞陽、僞陰、真陰。ROC空間将僞陽性率(FPR)定義為 X 軸,真陽性率(TPR)定義為 Y 軸。這兩個值由上面四個值計算得到,公式如下:

  TPR:在所有實際為陽性的樣本中,被正确地判斷為陽性之比率。TPR=TP/(TP+FN)

  FPR:在所有實際為陰性的樣本中,被錯誤地判斷為陽性之比率。FPR=FP/(FP+TN)

  放在具體領域來了解上述兩個名額。如在醫學診斷中,判斷有病的樣本。那麼盡量把有病的揪出來是主要任務,也就是第一個名額TPR,要越高越好。而把沒病的樣本誤診為有病的,也就是第二個名額FPR,要越低越好。不難發現,這兩個名額之間是互相制約的。如果某個醫生對于有病的症狀比較敏感,稍微的小症狀都判斷為有病,那麼他的第一個名額應該會很高,但是第二個名額也就相應地變高。最極端的情況下,他把所有的樣本都看做有病,那麼第一個名額達到1,第二個名額也為1。

2.3ROC的圖形化表示

  我們以FPR為橫軸,TPR為縱軸,得到如下ROC空間:

ROC曲線與AUC值

  我們可以看出:左上角的點(TPR=1,FPR=0),為完美分類,也就是這個醫生醫術高明,診斷全對;點A(TPR>FPR),醫生A的判斷大體是正确的。中線上的點B(TPR=FPR),也就是醫生B全都是蒙的,蒙對一半,蒙錯一半;下半平面的點C(TPR<FPR),這個醫生說你有病,那麼你很可能沒有病,醫生C的話我們要反着聽,為真庸醫。

上圖中一個門檻值,得到一個點。現在我們需要一個獨立于門檻值的評價名額來衡量這個醫生的醫術如何,也就是周遊所有的門檻值,得到ROC曲線。還是一開始的那幅圖,假設如下就是某個醫生的診斷統計圖,直線代表門檻值。我們周遊所有的門檻值,能夠在ROC平面上得到如下的ROC曲線。

ROC曲線與AUC值

  曲線距離左上角越近,證明分類器效果越好。

ROC曲線與AUC值

  如上,是三條ROC曲線,在0.23處取一條直線。那麼,在同樣的FPR=0.23的情況下,紅色分類器得到更高的TPR。也就表明,ROC越往上,分類器效果越好。我們用一個标量值AUC來量化他。

3.AUC值

3.1AUC值的定義

  AUC值為ROC曲線所覆寫的區域面積,顯然,AUC越大,分類器分類效果越好。

  AUC = 1,是完美分類器,采用這個預測模型時,不管設定什麼門檻值都能得出完美預測。絕大多數預測的場合,不存在完美分類器。

  0.5 < AUC < 1,優于随機猜測。這個分類器(模型)妥善設定門檻值的話,能有預測價值。

  AUC = 0.5,跟随機猜測一樣(例:丢銅闆),模型沒有預測價值。

  AUC < 0.5,比随機猜測還差;但隻要總是反預測而行,就優于随機猜測。

3.2AUC值的實體意義

  假設分類器的輸出是樣本屬于正類的socre(置信度),則AUC的實體意義為,任取一對(正、負)樣本,正樣本的score大于負樣本的score的機率。

3.3AUC值的計算

  (1)第一種方法:AUC為ROC曲線下的面積,那我們直接計算面積可得。面積為一個個小的梯形面積之和,計算的精度與門檻值的精度有關。

  (2)第二種方法:根據AUC的實體意義,我們計算正樣本score大于負樣本的score的機率。取N*M(N為正樣本數,M為負樣本數)個二進制組,比較score,最後得到AUC。時間複雜度為O(N*M)。

  (3)第三種方法:與第二種方法相似,直接計算正樣本score大于負樣本的score的機率。我們首先把所有樣本按照score排序,依次用rank表示他們,如最大score的樣本,rank=n(n=N+M),其次為n-1。那麼對于正樣本中rank最大的樣本(rank_max),有M-1個其他正樣本比他score小,那麼就有(rank_max-1)-(M-1)個負樣本比他score小。其次為(rank_second-1)-(M-2)。最後我們得到正樣本大于負樣本的機率為:

ROC曲線與AUC值

時間複雜度為O(N+M)。

繼續閱讀