ROC(Receiver Operating Characteristic)曲線和AUC常被用來評價一個二值分類器(binary classifier)的優劣。這篇文章簡單介紹ROC和AUC的特點,以及更為深入地,討論如何作出ROC曲線圖以及計算AUC。
ROC曲線
需要提前說明的是,我們這裡只討論二值分類器。對於分類器,或者說分類算法,評價指標主要有precision,recall,F-score,以及我們今天要討論的ROC和AUC。下圖是一個ROC曲線的示例。
正如我們在這個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)區間。
假如我們已經得到了所有樣本的概率輸出(屬於正樣本的概率),現在的問題是如何改變「discrimination threashold」?我們根據每個測試樣本屬於正樣本的概率值從大到小排序。下圖是一個示例,圖中共有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曲線的結果如下圖:
當我們將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更大的分類器效果更好。
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曲線的對比:
在上圖中,(a)和(c)為ROC曲線,(b)和(d)為Precision-Recall曲線。(a)和(b)展示的是分類其在原始測試集(正負樣本分布平衡)的結果,(c)和(d)是將測試集中負樣本的數量增加到原來的10倍後,分類器的結果。可以明顯的看出,ROC曲線基本保持原貌,而Precision-Recall曲線則變化較大。
SPSS中ROC曲線操作過程
SPSS 可進行ROC分析,操作步驟如下:
1.定義列變量,並輸入數據
(1)診斷分類值或檢測結果(test):多個診斷試驗則定義test1,test2,...
(2)金標準類別(group):1=病例組,0=對照組
(3)分類頻數(freq),需要進一步執行第二步
2.說明頻數變量 路徑:Data\Weight Case..., 選項:Weight case by, 填表:Freqency Variable (freq)
3.ROC分析:路徑:Grahps\Roc Curve... 填表:Test Variable(test), State Variable (group), Value of state variable,選項包括:
(display) ROC Curve,with diagonal reference line (機會線), standard error and confidence interval (面積的標準誤,及其可信區間), Coordinate points of the ROC curve (ROC曲線的坐標點), options:test direction (如果檢測值小劃歸為陽性,則需要選), cofidence level (%):需要除95%以外的可信度,可在此定義。
如果是連續型測量資料,則不需要第1步的(3)及第2步。
R中繪製
ROCR包中主要是兩個class:prediction和performance。前者是將預測結果和真實標籤組合在一起,生成一個 prediction對象,然後在用performance函數,按照給定的評價方法,生成一個performance對象,最後直接對 performance用plot函數就能繪製出相應的ROC曲線。
# plot a ROC curve for a single prediction run
# and color the curve according to cutoff.
data(ROCR.simple)
pred <- prediction(ROCR.simple$predictions, ROCR.simple$labels)
perf <- performance(pred,"tpr","fpr")
plot(perf,colorize=TRUE)
上面是ROCR中的一個例子,ROCR.simple$predictions是預測結果,ROCR.simple$labels是真實的標籤,從而產生一個prediction對象;然後tpr是true positive rate的意思,fpr則是false positive rate的意思,這樣最後畫出來的就是最常見的ROC曲線。
本公眾號精彩歷史文章:
04:如何在R軟體中求一致性指數( Harrell'concordance index:C-index)?
05:Nomogram 繪製原理及R&SAS實現.
06 : Lasso方法簡要介紹及其在回歸分析中的應用
07 : 最優模型選擇中的交叉驗證(Cross validation)方法
08 : 用R語言進行分位數回歸(Quantile Regression)
09 : 樣本數據中異常值(Outliers)檢測方法及SPSS & R實現
10 : 原始數據中幾類缺失值(Missing Data)的SPSS及R處理方法
11 : [Survival analysis] Kaplan-Meier法之SPSS實現
12 : [Survival analysis] COX比例風險回歸模型在SPSS中的實現
13 : 用R繪製地圖:以疾病流行趨勢為例
14 : 數據挖掘方法:聚類分析簡要介紹 及SPSS&R實現
15 : 醫學研究中的Logistic回歸分析及R實現
回復文章前代碼數字如「04」即可查看或直接查看歷史文章。
公眾號:survival-analysis
郵箱:survival_analysis@126.com 歡迎關注轉發