機器學習教程 之 模型性能評價:受試者工作特徵曲線 ROC與AUC

模型性能評價是每一位機器學習工作者都需要掌握的一項技能,除了最常見的損失函數比較,今天再向大家介紹一種稍微高明一點兒的方法 ROC與AUC

在正式介紹ROC曲線之前,我們還需要介紹一些額外的知識:分類結果混淆矩陣
這裏寫圖片描述
對於二分類問題,可將樣本根據真實類別與學習器預測類別的組合劃分爲真正例(TP)、假正例(FP)、真反例(TN)、假反例(FN),則顯然有了 TP+FP+TN+FN=

很多學習器是爲測試樣本產生一個預測概率,然後將這個預測值與一個分類閾值進行比較,若大於閾值則分爲正類,否則爲反類。例如,神經網絡在一般情形下是對每一個測試樣本預測出一個0~1之間的預測概率,然後將這個值與0.5比較,大於0.5則判爲正例,否則爲反例。這個預測概率的好壞直接決定了學習器的泛化能力。實際上,根據這個預測結果,我們可以將測試樣本進行排序,“最可能“是正例的排在前面,“最不可能“是正例的排在最後面。這樣,分類過程就相當於在這個排序中以某個“截斷點“將樣本分類兩部分,前一部分判定爲正例,後一部分判定爲反例。這便是ROC曲線的應用背景,從這裏我們應該知道ROC曲線適用於模型處理二分類問題的情形。

在不同的應用任務中,我們可以根據任務需求來採用不同的截斷點,例如若我們更重視“查準率“,則可選擇排序中靠前的位置進行截斷;若更重視“查全率“,則可以選擇排序中靠後的位置進行截斷。因此,排序本身的質量好壞,體現了綜合考慮學習器在不同任務下的“期望泛化性能“的好壞。ROC曲線則是從這個角度出發來研究學習器泛化性能的有力工具。

ROC全稱是“受試者工作特徵“曲線,它源於“二戰“中用於敵機檢測的雷達信號分析技術。我們根據學習器的預測結果對樣例進行排序,按此順序逐個把樣本作爲正例進行預測,沒吃計算出兩個重要量的值,分別以它們爲橫縱座標作圖,就得到了“ROC“曲線。ROC曲線的縱座標是“真正利率“(TPR),橫軸是“假正例率“(FPR),兩者分別定義爲

TPR=TPTP+FN

FPR=FPTP+FP

顯示ROC曲線的圖稱爲ROC圖。在進行學習器比較時,若一個學習器的ROC曲線被另一個學習器的曲線完全包住,則可斷言後者的性能優於前者;若兩個學習器的ROC曲線發生交叉,則難以一般性的斷言兩者孰優孰劣。此時若一定要進行比較,則較爲合理的判據是比較ROC曲線下的面積,即AUC(Area under ROC Curve)。

python的sklearn中計算ROC與AUC的函數

import matplotlib.pyplot as plt  
from sklearn.metrics import roc_curve, auc  

fpr,tpr,threshold = roc_curve(y_test, y_score) ###計算真正率和假正率  
roc_auc = auc(fpr,tpr) ###計算auc的值  

plt.figure()  
lw = 2  
plt.figure(figsize=(10,10))  
plt.plot(fpr, tpr, color='darkorange',  
         lw=lw, label='ROC curve (area = %0.2f)' % roc_auc) ###假正率爲橫座標,真正率爲縱座標做曲線  
plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')   
plt.xlabel('False Positive Rate')  
plt.ylabel('True Positive Rate')  
plt.title('Receiver operating characteristic example')  
plt.show()  

參考文獻
[1] 周志華. 機器學習
[2] https://blog.csdn.net/lz_peter/article/details/78054914

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章