1. 程式人生 > >ROC曲線的AUC(以及其他評價指標的簡介)知識整理

ROC曲線的AUC(以及其他評價指標的簡介)知識整理

相關評價指標在這片文章裡有很好介紹

ROC曲線:接收者操作特徵(receiveroperating characteristic)

比較分類模型的可視工具,曲線上各點反映著對同一訊號刺激的感受性。

縱軸:真正率(擊中率)true positive rate ,TPR,稱為靈敏度。所有實際正例中,正確識別的正例比例。TPR=TP/ (TP+FN)

橫軸:假正率(虛報率)false positiverate, FPR,稱為特異度。所有實際負例中,錯誤得識別為正例的負例比例。FPR= FP / (FP + TN)

Pos

neg

Pos

True positive(TP)

False positive(FP)

Predicted Positive(P’=TP+FP)

neg

False negative(FN)

True negative(TN)

Predicted Negative(N’=FN+TN)

Actual pos(P=TP+FN)

Actual neg(N=FP+TN)

P為所有正例個數

N為所有負例個數。

TPR=TP/ (TP+FN) = TP/P

FPR=FP / (FP +TN)= FP/N

Pos

Neg

pos

TP=70

FP=30

P’=100

neg

FN=20

TN=80

N’=100

P=90

N=110

則相關數值請自己計算。

一個閾值就決定了ROC空間中點的位置。舉例來說,如果可能值低於或者等於0.8這個閾值就將其認為是正類,而其他的值被認為是負類。這樣就可以通過畫每一個閾值的ROC點來生成一個生成一條曲線。MedCalc是較好的ROC曲線分析軟體。

在ROC空間座標中,左上角的點,軸(0,1)點,這個代表著100%靈敏(沒有假陰性)和100%特異(沒有假陽性)。而(0,1)點被稱為完美分類器。

而副對角線,也就是從左下到右上的對角線,也叫無識別率線,代表著一個完全隨機預測。一個最直觀的隨機預測的例子就是拋硬幣。

Roc曲線用來評價分類器的效能。通過測試分類結果可以計算得到TPR和FPR的一個點對。再通過調整這個分類器分類的閾值(從0.1到0.9),閾值的設定將例項分類到正類或者負類(比如大於閾值劃分為正類)。因此根據變化閾值會產生不同效果的分類,

得到多個分類結果的點,可以畫出一條曲線,經過(0, 0),(1, 1)。

曲線在對角線左上方,離得越遠說明分類效果好。如果出現在對角線右下方,直觀的補救辦法就是把所有的預測結果反向,即:分類器目的是識別正例,但效果差,所以把分類器輸出結果正負顛倒,把輸出的正例當成負例,把負例當成正例。就得到一個好的分類器。從源頭上說,分類器越差越好。

因為研究分類器閾值的指定,所以,ROC曲線還可以用來計算“均值平均精度”(mean average precision),這是當你通過改變閾值來選擇最好的結果時所得到的平均精度(PPV).

另外,在一些分類問題中犯不同的錯誤代價是不同的(cost sensitive learning)。這樣,預設0.5為分類閾值的傳統做法也顯得不恰當了。在我的代價敏感學習的研究論文Cost-sensitive Decision Tree for Uncertain Data探討了代價的衡量問題。制定cost的標準受行業限制,比如醫療機構,誤診以後,癌症病人直接導致病人死亡,這很難用cost衡量。而測試的專案很容易用金錢衡量。

所以分類的閾值的選定,本身就是一個研究課題。收到分類器以及資料物件的限制。普通資料,可以用0.5分類,而其他的情況下閾值的選擇需要實際測試矯正。

而cost sensitive 直接定義一個cost作為分類標準,這個權重的指定包含原有的概率,還涉及實際產生的代價,從而疊加到一起作為分類標準。

如果在特定行業內,指定標準合理,會有很大的幫助。比如信用卡欺詐識別。

而曲線ROC curve右下方的面積成為Area Under roc Curve(AUC) 值介於0.5到1.0之間,較大的AUC代表了較好的performance

引用一個百度裡的例子:

下表是一個邏輯迴歸得到的結果。將得到的實數值按大到小劃分成10個個數相同的部分。

Percentile

例項數

正例數

1-特異度(%)

敏感度(%)

10

6180

4879

2.73

34.64

20

6180

2804

9.80

54.55

30

6180

2165

18.22

69.92

40

6180

1506

28.01

80.62

50

6180

987

38.90

87.62

60

6180

529

50.74

91.38

70

6180

365

62.93

93.97

80

6180

294

75.26

96.06

90

6180

297

87.59

98.17

100

6177

258

100.00

100.00

其正例數為實際的正類數。就是說,將邏輯迴歸得到的結果按從大到小排列,倘若以前10%的數值作為閾值,即將有10%的例項都劃歸為正類,6180個。其中,正確的個數為4879個,佔所有正類的4879/14084*100%=34.64%,即敏感度;另外,有6180-4879=1301個負例項被錯劃為正類,佔所有負類的1301 /47713*100%=2.73%,即特異度。以這兩組值分別作為x值和y值,在excel中作散點圖。得到ROC曲線如下

 

AUC的計算方法總結:

1.直接計算曲線下的梯形面積

最直觀的,根據AUC這個名稱,我們知道,計算出ROC曲線下面的面積,就是AUC的值。事實上,這也是在早期Machine Learning文獻中常見的AUC計算方法。由於我們的測試樣本是有限的。我們得到的AUC曲線必然是一個階梯狀的。因此,計算的AUC也就是這些階梯下面的面積之和。這樣,我們先把score排序(假設score越大,此樣本屬於正類的概率越大),然後一邊掃描就可以得到我們想要的AUC。但是,這麼做有個缺點,就是當多個測試樣本的score相等的時候,我們調整一下閾值,得到的不是曲線一個階梯往上或者往右的延展,而是斜著向上形成一個梯形。此時,我們就需要計算這個梯形的面積。由此,我們可以看到,用這種方法計算AUC實際上是比較麻煩的。

2.給定所有正負樣本的得分score,組成正負樣本對,利用正樣本大於負樣本所出現的頻率(也可以說是個數)來計算AUC。

一個關於AUC的很有趣的性質是,它和Wilcoxon-Mann-WitneyTest是等價的。而Wilcoxon-Mann-WitneyTest就是測試任意給一個正類樣本和一個負類樣本,正類樣本的score有多大的概率大於負類樣本的score。有了這個定義,我們就得到了另外一種計算AUC的辦法:得到這個概率。我們知道,在有限樣本中我們常用的得到概率的辦法就是通過頻率來估計之。這種估計隨著樣本規模的擴大而逐漸逼近真實值。這和上面的方法中,樣本數越多,計算的AUC越準確類似,也和計算積分的時候,小區間劃分的越細,計算的越準確是同樣的道理。具體來說就是統計一下所有的MXN(M為正類樣本的數目,N為負類樣本的數目)個正負樣本對中,有多少個組中的正樣本的score大於負樣本的score。當二元組中正負樣本的score相等的時候,按照0.5計算。然後除以MN。實現這個方法的複雜度為O(n^2)。n為樣本數(即n=M+N)。

3.按樣本score排序,按排序數計算正樣本大於負樣本的個數,來計算AUC

第三種方法實際上和上述第二種方法是一樣的,但是複雜度減小了。它也是首先對score從大到小排序,然後令最大score對應的sample的rank為n,第二大score對應sample的rank為n-1,以此類推。然後把所有的正類樣本的rank相加,再減去正類樣本的score為最小的那M個值的情況。得到的就是所有的樣本中有多少對正類樣本的score大於負類樣本的score。然後再除以MXN。

 

另外,特別需要注意的是,當存在score相等的情況時,對相等score的樣本,需要賦予相同的rank(無論這個相等的score是出現在同類樣本還是不同類的樣本之間,都需要這樣處理)。具體操作就是再把所有這些score相等的樣本的rank取平均。然後再使用上述公式。

 

此外,還有其他評價指標:

F1-Measure

F1-Measurea評價指標經常在資訊檢索和自然語言處理中使用。是根據準確率Precision和召回率Recall二者給出的一個綜合的評價指標,具體定義如下:

F1 = 2rp / ( r+p )

其中r為recall,p為precision.

另外還以一些學術裡,經常用到的指標,其定義的表示式如下


給出網路上的一個例子:

以下部分內容引致網路

ROC曲線

得此名的原因在於曲線上各點反映著相同的感受性,它們都是對同一訊號刺激的反應,只不過是在幾種不同的判定標準下所得的結果而已。接受者操作特性曲線就是以虛報概率為橫軸,擊中概率為縱軸所組成的座標圖,和被試在特定刺激條件下由於採用不同的判斷標準得出的不同結果畫出的曲線。

最好的可能預測方式是一個在左上角的點,在ROC空間座標軸(0,1)點,這個代表著100%靈敏(沒有假陰性)和100%特異(沒有假陽性)。而(0,1)點被稱為完美分類器。一個完全隨機預測會得到一條從左下到右上對角線(也叫無識別率線)上的一個點。一個最直觀的隨機預測的作決定的例子就是拋硬幣。 

這條斜線將ROC空間劃分為兩個區域,在這條線的以上的點代表了一個好的分類結果,而在這條線以下的點代表了差的分類結果。


圖中給出了上面4個結果的ROC空間分佈。A方式的結果是A,B,C中最好的一個。B的結果是一種隨機猜測線(那條斜線),在表中我們可以看到B的精確度是50%。然而當將C作一個映象後,C的結果甚至要比A還要好。這個作映象的方法就是簡單的不管C預測了什麼,就做其預測的反面。離左上角越近的預測,其結果越好。或者說,離隨機猜測線越遠,則預測的結果越好,如果其點是在右下方的,那麼只需作一個映象即可。

ROC空間中的線

離散分類器,如決策樹,產生的是離散的數值或者一個雙標籤。應用到例項中,這樣的分類器最後只會在ROC空間產生單一的點。而一些其他的分類器,如樸素貝葉斯分類器,邏輯迴歸或者人工神經網路,產生的是例項屬於某一類的可能性,對於這些方法,一個閾值就決定了ROC空間中點的位置。舉例來說,如果可能值低於或者等於0.8這個閾值就將其認為是陽性的類,而其他的值被認為是陰性類。這樣就可以通過畫每一個閾值的ROC點來生成一個生成一條曲線。MedCalc是較好的ROC曲線分析軟體。

Area Under roc Curve(AUC)就出現了。AUC的值就是處於ROCcurve下方的那部分面積的大小。通常,AUC的值介於0.5到1.0之間,較大的AUC代表了較好的performance。

AUC是一種用來度量分類模型好壞的一個標準。這樣的標準其實有很多,例如:大約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分析的內容瞭解還不深刻,所以這裡只做些簡單的概念性的介紹。