2017-07-10 14:38:24
理論參考:
http://www.cnblogs.com/suanec/p/5941630.html
ROC全稱:receiver operation characters,適用於二分類。
同理可得由ROC曲線計算的AUC,適用於二分類。
計算AUC需要知道這個表格:
實際正樣本 | 實際負樣本 | |
預測正樣本 | 正樣本正確數 | 正樣本錯誤數 |
預測負樣本 | 負樣本錯誤數 | 負樣本正確數 |
其中實際正樣本常被成為Positive,實際負樣本常被成為Negative。
對應的表格中數據分別為True Positive、False Positive、True Negative、False Negative。
對應的概率Rate,分別為TPR、FPR、TNR、FNR。
其中TPR=TP/P、FPR=FP/N,繪制ROC,主要使用TPR和FPR。
使用網上的例子:
模型預測情況與實際類標情況:
由以上繪制的ROC曲線及各點取值。
當閾值自高向低取,分別為0.9、0.8、0.7、0.6、0.55。
0.9:TPR:0.1,FPR:0
0.8:TPR:0.2,FPR:0
0.7:TPR:0.2,FPR:0.1
0.6:TPR:0.3,FPR:0.1
0.55:TPR:0.4,FPR:0.1
按照取值繪制ROC圖線,計算圖線下面積即可得AUC。
其中:以0.7舉例TRP和FPR如何統計:
當閾值為0.7時,可得模型將1、2、3樣本分為了正樣本,其他為負樣本。
1、2、3中正樣本正確了兩個。
TPR:正樣本正確率為正樣本正確數目/所有正樣本數目:2/10=0.2。
FPR:正樣本錯誤率為正樣本錯誤數目/所有負樣本數目:1/10=0.1。
那么在0.7為閾值可以繪制ROC曲線點:(0.1,0.2)。
以此類推。繪制多個閾值下的ROC曲線點,可得ROC曲線的近似值。(因為閾值取值數量有限,故ROC為近似值)
計算AUC:
因為ROC曲線近似,可以利用矩陣面積加和得到面積和。(計算AUC面積和,就可以按個人喜好計算了,spark mllib中的AUC是按坐標取值計算連線形成梯形的面積加和。個人感覺按縱軸計算矩陣面積實現更容易一些,但精度有損失。)
當ROC為精確時,需要積分。僅存於理論層面。