ROC曲線指受試者工做特徵曲線 / 接收器操做特性曲線(receiver operating characteristic curve), 是反映敏感性和特異性連續變量的綜合指標,是用構圖法揭示敏感性和特異性的相互關係,它經過將連續變量設定出多個不一樣的臨界值,從而計算出一系列敏感性和特異性,再以敏感性爲縱座標、(1-特異性)爲橫座標繪製成曲線,曲線下面積越大,診斷準確性越高。在ROC曲線上,最靠近座標圖左上方的點爲敏感性和特異性均較高的臨界值。算法
ROC曲線的例子數據結構
考慮一個二分問題,即將實例分紅正類(positive)或負類(negative)。對一個二分問題來講,會出現四種狀況。若是一個實例是正類而且也被 預測成正類,即爲真正類(True positive),若是實例是負類被預測成正類,稱之爲假正類(False positive)。相應地,若是實例是負類被預測成負類,稱之爲真負類(True negative),正類被預測成負類則爲假負類(false negative)。機器學習
TP:正確確定的數目;函數
FN:漏報,沒有正確找到的匹配的數目;學習
FP:誤報,給出的匹配是不正確的;測試
TN:正確拒絕的非匹配對數;spa
預測 | ||||
1 | 0 | 合計 | ||
實際 | 1 | True Positive(TP) | False Negative(FN) | Actual Positive(TP+FN) |
0 | False Positive(FP) | True Negative(TN) | Actual Negative(FP+TN) | |
合計 | Predicted Positive(TP+FP) | Predicted Negative(FN+TN) | TP+FP+FN+TN |
從列聯表引入兩個新名詞。其一是真正類率(true positive rate ,TPR), 計算公式爲TPR=TP/ (TP+ FN),刻畫的是分類器所識別出的 正實例佔全部正實例的比例。另一個是負正類率(false positive rate, FPR),計算公式爲FPR= FP / (FP + TN),計算的是分類器錯認爲正類的負實例佔全部負實例的比例。還有一個真負類率(True Negative Rate,TNR),也稱爲specificity,計算公式爲TNR=TN/ (FP+ TN) = 1-FPR。.net
其中,兩列True matches和True non-match分別表明應該匹配上和不該該匹配上的翻譯
兩行Pred matches和Pred non-match分別表明預測匹配上和預測不匹配上的3d
在一個二分類模型中,對於所獲得的連續結果,假設已肯定一個閥值,好比說 0.6,大於這個值的實例劃歸爲正類,小於這個值則劃到負類中。若是減少閥值,減到0.5,當然能識別出更多的正類,也就是提升了識別出的正例佔全部正例 的比類,即TPR,但同時也將更多的負實例看成了正實例,即提升了FPR。爲了形象化這一變化,在此引入ROC,ROC曲線能夠用於評價一個分類器。
橫軸FPR: 1-TNR,1-Specificity, FPR越大,預測正類中實際負類越多。
縱軸TPR:Sensitivity(正類覆蓋率),TPR越大,預測正類中實際正類越多。
理想目標:TPR=1,FPR=0,即圖中(0,1)點,故ROC曲線越靠攏(0,1)點,越偏離45度對角線越好,Sensitivity、Specificity越大效果越好。
ROC曲線和它相關的比率
(a)理想狀況下,TPR應該接近1,FPR應該接近0。
ROC曲線上的每個點對應於一個threshold,對於一個分類器,每一個threshold下會有一個TPR和FPR。
好比Threshold最大時,TP=FP=0,對應於原點;Threshold最小時,TN=FN=0,對應於右上角的點(1,1)
(b)P和N得分不做爲特徵間距離d的一個函數,隨着閾值theta增長,TP和FP都增長
Receiver Operating Characteristic,翻譯爲"接受者操做特性曲線",夠拗口的。曲線由兩個變量1-specificity 和 Sensitivity繪製. 1-specificity=FPR,即負正類率。Sensitivity便是真正類率,TPR(True positive rate),反映了正類覆蓋程度。這個組合以1-specificity對sensitivity,便是以代價(costs)對收益(benefits)。
此外,ROC曲線還能夠用來計算「均值平均精度」(mean average precision),這是當你經過改變閾值來選擇最好的結果時所獲得的平均精度(PPV).
下表是一個邏輯迴歸獲得的結果。將獲得的實數值按大到小劃分紅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%,即1-特異度。以這兩組值分別做爲x值和y值,在excel中做散點圖。
二 如何畫roc曲線
假設已經得出一系列樣本被劃分爲正類的機率,而後按照大小排序,下圖是一個示例,圖中共有20個測試樣本,「Class」一欄表示每一個測試樣本真正的標籤(p表示正樣本,n表示負樣本),「Score」表示每一個測試樣本屬於正樣本的機率。
接下來,咱們從高到低,依次將「Score」值做爲閾值threshold,當測試樣本屬於正樣本的機率大於或等於這個threshold時,咱們認爲它爲正樣本,不然爲負樣本。舉例來講,對於圖中的第4個樣本,其「Score」值爲0.6,那麼樣本1,2,3,4都被認爲是正樣本,由於它們的「Score」值都大於等於0.6,而其餘樣本則都認爲是負樣本。每次選取一個不一樣的threshold,咱們就能夠獲得一組FPR和TPR,即ROC曲線上的一點。這樣一來,咱們一共獲得了20組FPR和TPR的值,將它們畫在ROC曲線的結果以下圖:
AUC(Area under Curve):Roc曲線下的面積,介於0.1和1之間。Auc做爲數值能夠直觀的評價分類器的好壞,值越大越好。
首先AUC值是一個機率值,當你隨機挑選一個正樣本以及負樣本,當前的分類算法根據計算獲得的Score值將這個正樣本排在負樣本前面的機率就是AUC值,AUC值越大,當前分類算法越有可能將正樣本排在負樣本前面,從而可以更好地分類。
2、AUC計算
1. 最直觀的,根據AUC這個名稱,咱們知道,計算出ROC曲線下面的面積,就是AUC的值。事實上,這也是在早期 Machine Learning文獻中常見的AUC計算方法。因爲咱們的測試樣本是有限的。咱們獲得的AUC曲線必然是一個階梯狀的。所以,計算的AUC也就是這些階梯 下面的面積之和。這樣,咱們先把score排序(假設score越大,此樣本屬於正類的機率越大),而後一邊掃描就能夠獲得咱們想要的AUC。可是,這麼 作有個缺點,就是當多個測試樣本的score相等的時候,咱們調整一下閾值,獲得的不是曲線一個階梯往上或者往右的延展,而是斜着向上造成一個梯形。此 時,咱們就須要計算這個梯形的面積。由此,咱們能夠看到,用這種方法計算AUC其實是比較麻煩的。
2. 一個關於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)
3. 第三種方法實際上和上述第二種方法是同樣的,可是複雜度減少了。它也是首先對score從大到小排序,而後令最大score對應的sample 的rank爲n,第二大score對應sample的rank爲n-1,以此類推。而後把全部的正類樣本的rank相加,再減去M-1種兩個正樣本組合的狀況。獲得的就是全部的樣本中有多少對正類樣本的score大於負類樣本的score。而後再除以M×N。即
公式解釋:
一、爲了求的組合中正樣本的score值大於負樣本,若是全部的正樣本score值都是大於負樣本的,那麼第一位與任意的進行組合score值都要大,咱們取它的rank值爲n,可是n-1中有M-1是正樣例和正樣例的組合這種是不在統計範圍內的(爲計算方便咱們取n組,相應的不符合的有M個),因此要減掉,那麼同理排在第二位的n-1,會有M-1個是不知足的,依次類推,故獲得後面的公式M*(M+1)/2,咱們能夠驗證在正樣本score都大於負樣本的假設下,AUC的值爲1
二、根據上面的解釋,不可貴出,rank的值表明的是可以產生score前大後小的這樣的組合數,可是這裏包含了(正,正)的狀況,因此要減去這樣的組(即排在它後面正例的個數),便可獲得上面的公式
另外,特別須要注意的是,再存在score相等的狀況時,對相等score的樣本,須要 賦予相同的rank(不管這個相等的score是出如今同類樣本仍是不一樣類的樣本之間,都須要這樣處理)。具體操做就是再把全部這些score相等的樣本 的rank取平均。而後再使用上述公式。
AUC(Area Under Curve)被定義爲ROC曲線下的面積,顯然這個面積的數值不會大於1。又因爲ROC曲線通常都處於y=x這條直線的上方,因此AUC的取值範圍在0.5和1之間。使用AUC值做爲評價標準是由於不少時候ROC曲線並不能清晰的說明哪一個分類器的效果更好,而做爲一個數值,對應AUC更大的分類器效果更好。
參考: http://blog.csdn.net/abcjennifer/article/details/7359370