AUC(Area Under roc Curve )計算及其與ROC的關係

讓咱們從頭提及,首先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分析的內容瞭解還不深入,因此這裏只作些簡單的概念性的介紹。測試

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。好了,到此爲止,全部的 前續介紹部分結束,下面進入本篇帖子的主題:AUC的計算方法總結。orm

 

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

 

一個關於AUC的頗有趣的性質是,它和Wilcoxon-Mann-Witney Test是等價的。這個等價關係的證實留在下篇帖子中給出。而Wilcoxon-Mann-Witney Test就是測試任意給一個正類樣本和一個負類樣本,正類樣本的score有多大的機率大於負類樣本的score。有了這個定義,咱們就獲得了另一中計算AUC的辦法:獲得這個機率。咱們知道,在有限樣本中咱們經常使用的獲得機率的辦法就是經過頻率來估計之。這種估計隨着樣本規模的擴大而逐漸逼近真實值。這 和上面的方法中,樣本數越多,計算的AUC越準確相似,也和計算積分的時候,小區間劃分的越細,計算的越準確是一樣的道理。具體來講就是統計一下全部的 M×N(M爲正類樣本的數目,N爲負類樣本的數目)個正負樣本對中,有多少個組中的正樣本的score大於負樣本的score。當二元組中正負樣本的 score相等的時候,按照0.5計算。而後除以MN。實現這個方法的複雜度爲O(n^2)。n爲樣本數(即n=M+N)ci

 

第三種方法實際上和上述第二種方法是同樣的,可是複雜度減少了。它也是首先對score從大到小排序,而後令最大score對應的sample 的rank爲n,第二大score對應sample的rank爲n-1,以此類推。而後把全部的正類樣本的rank相加,再減去正類樣本的score爲最 小的那M個值的狀況。獲得的就是全部的樣本中有多少對正類樣本的score大於負類樣本的score。而後再除以M×N。即it

 

AUC=((全部的正例位置相加)-M*(M+1))/(M*N)io

 

另外,特別須要注意的是,再存在score相等的狀況時,對相等score的樣本,須要 賦予相同的rank(不管這個相等的score是出如今同類樣本仍是不一樣類的樣本之間,都須要這樣處理)。具體操做就是再把全部這些score相等的樣本 的rank取平均。而後再使用上述公式。form

相關文章
相關標籤/搜索