(原+轉)ROC曲線


轉自:http://baike.baidu.com/link?url=_H9luL0R0BSz8Lz7aY1Q_hew3JF1w-Zj_a51ggHFB_VYQljACH01pSU_VJtSGrGJOR1h_du8O0S2ADOzzq9Nqq

 

 
受試者工作特征曲線 (receiver operating characteristic curve,簡稱ROC曲線),又稱為 感受性曲線(sensitivity curve)。得此名的原因在於曲線上各點反映着相同的 感受性,它們都是對同一 信號刺激的反應,只不過是在幾種不同的判定標准下所得的結果而已。接受者操作特性曲線就是以虛報概率為 橫軸,擊中概率為縱軸所組成的 坐標圖,和被試在特定刺激條件下由於采用不同的判斷標准得出的不同結果畫出的曲線。
ROC曲線是根據一系列不同的二分類方式(分界值或決定閾),以真陽性率(靈敏度)為縱坐標,假陽性率(1-特異度)為橫坐標繪制的曲線。傳統的診斷試驗評價方法有一個共同的特點,必須將試驗結果分為兩類,再進行統計分析。ROC曲線的評價方法與傳統的評價方法不同,無須此限制,而是根據實際情況,允許有中間狀態,可以把試驗結果划分為多個有序分類,如正常、大致正常、可疑、大致異常和異常五個等級再進行統計分析。因此,ROC曲線評價方法適用的范圍更為廣泛。[1]  
 
考慮一個二分問題,即將實例分成正類(positive)或負類(negative)。對一個二分問題來說,會出現四種情況。如果一個實例是正類並且也被 預測成正類,即為真正類(True positive),如果實例是負類被預測成正類,稱之為假正類(False positive)。相應地,如果實例是負類被預測成負類,稱之為真負類(True negative),正類被預測成負類則為假負類(false negative)。
列聯表如下表所示,1代表正類,0代表負類。
     
預測
     
     
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/ ( TPFN),刻畫的是 分類器所識別出的 正實例占所有正實例的比例。另外一個是假正類率(false positive rate, FPR),計算公式為 FPR= FP / (FP + TN),計算的是 分類器錯認為正類的負實例占所有負實例的比例。還有一個真負類率(True Negative Rate,TNR),也稱為specificity,計算公式為TNR= TN/ ( FPTN) = 1 -  FPR
在一個二分類模型中,對於所得到的連續結果,假設已確定一個 閥值,比如說 0.6,大於這個值的實例划歸為正類,小於這個值則划到負類中。如果減小 閥值,減到0.5,固然能識別出更多的正類,也就是提高了識別出的正例占所有正例的比例,即TPR,但同時也將更多的負實例當作了正實例,即提高了FPR。為了形象化這一變化,在此引入ROC。
Receiver Operating Characteristic,翻譯為"接受者操作特性曲線",夠拗口的。曲線由兩個變量1-specificity 和 Sensitivity繪制. 1-specificity=FPR,即假正類率。Sensitivity即是真正類率,TPR(True positive rate),反映了正類覆蓋程度。這個組合以1-specificity對sensitivity,即是以代價(costs)對收益(benefits)。
下表是一個邏輯回歸得到的結果。將得到的實數值按大到小划分成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曲線如下
roc曲線

 

上面的部分均來自百度百科。

/////////////////////////////////////////////////////////////////////////////////////////////////////////////

下面是自己的理解,如果不正確,歡迎指正(雖說基本上沒啥人看。。。)

前幾天畫了ROC曲線,其實按照自己的理解,就是錯誤接受率(FAR,false acceptance rate)和錯誤拒絕率(FRR,false rejection rate)的關系曲線。FAR對應FP,FRR對應FN。這兩個通過閾值T來計算。因為對於分類問題,都需要一個閾值,來判斷某樣本是屬於positive還是negative。對應於每個閾值,都可以得到一個FAR和一個FRR。按照不同的stepsize,得到不同的閾值,便可以得到對應的一組FAR和FRR。之后畫FAR和FRR的關系,便是ROC曲線。

matlab代碼如下(由於FAR和FRR的數據變化范圍比較大,因而使用了對數坐標log):

 1 load('result.mat');
 2 Pnum=length(resultP);
 3 Nnum=length(resultN);
 4 
 5 minN=min(resultN);
 6 maxN=max(resultN);
 7 
 8 index=0;
 9 for threshold=minN:0.002:maxN
10     index=index+1;
11     FRR(index)=length(find(resultP>threshold))/Pnum;
12     FAR(index)=length(find(resultN<threshold))/Nnum; 
13     thresholdT(index)=threshold;
14 end
15 plot(FAR,FRR);
16 title('ROC曲線');
17 set(gca,'yscale','log') 
18 set(gca,'xscale','log') 
19 axis([min(FAR) max(FAR)+0.01 min(FRR) max(FRR)])
20 grid on
21 grid minor
22 
23 set(gca,'YTickMode','manual');
24 set(gca,'YMinorTick','on');
25 ylabelval=[1e-4 1e-3 1e-2 1e-1 0.2]';
26 set(gca,'ytick',ylabelval') ;
27 for kk=1:1:length(ylabelval) 
28     b(kk)='%';
29 end
30 ylabeltick=[num2str(ylabelval*100),b'];
31 set(gca,'yticklabel',ylabeltick) ;
32 
33 set(gca,'XTickMode','manual');
34 xlabelval=[1e-6 1e-5 1e-4 1e-3 1e-2 1e-1 1]';
35 set(gca,'xtick',xlabelval) ;
36 for kk=1:1:length(xlabelval)
37     a(kk)='%';
38 end
39 xlabeltick=[num2str(xlabelval*100),a'];
40 set(gca,'xticklabel',xlabeltick);
41 xlabel('FAR');
42 ylabel('FRR');

畫出來的結果如下:

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM