機器學習--PR曲線, ROC曲線


在機器學習領域,如果把Accuracy作為衡量模型性能好壞的唯一指標,可能會使我們對模型性能產生誤解,尤其是當我們模型輸出值是一個概率值時,更不適宜只采取Accuracy作為衡量模型性泛化能的指標.這篇博文會為大家介紹兩種比較二分決策模型性能的方法PR曲線, ROC曲線

預測概率

對於分類問題我們可以直接預測輸入數據的類別,或者我們也可以為測試樣本產生一個實值或概率預測,並將這個預測值與一個分類閾值作比較,比如說默認閾值為0.5,那么對於輸出概率在[0.0.49]的樣本會被預測為負,對於輸出概率在 [0.5,1.0]之間的樣本會被預測為正.同時我們可以通過更改閾值來調整模型在某個問題上的預測性能.

對於二分類問題,主要有兩類錯誤

  • False Negative(假反例):一個正例被錯誤的預測為反例
  • False Positive(假正例):一個反例給錯誤的預測為正例

利用概率預測結果並設置合適的閾值我們就可以在這兩種錯誤之間取得平衡.具體來說我們先根據這個實值或者是概率預測結果對測試樣本進行排序,"最可能"是正例的排在最前邊或者說最左邊,"最不可能"是正例的排在最后邊或者說最右邊,通過調整閾值在這個排序數組中的位置將樣本分為兩個部分,閾值左邊被預測為正例,閾值右側被預測為反例.如果我們希望提高模型的查准率/降低假正率,即提高預測為正例的樣本里實際結果也為正例的樣本的占比,我們就可以把這個閾值向左移;如果我們希望提高模型的查全率/降低假反例,即提高實際為正例的樣本中預測結果也為正例的樣本的占比,那么我們就可以把這個閾值向左移.

排序本身的好壞體現了綜合考慮學習器在一般情況下泛化性能的好壞.ROC則是從這個角度出發來研究學習器泛化性能的有力工具.     --<機器學習> 周志華

 

ROC曲線

什么是ROC

接收器操做特征曲線,也叫ROC曲線,根據wikipedia的解釋:

在信號檢測理論中,接收者操作特征曲線receiver operating characteristic curve,或者叫ROC曲線)是一種坐標圖式的分析工具,用於 (1) 選擇最佳的信號偵測模型、舍棄次佳的模型。 (2) 在同一模型中設定最佳閾值。

ROC曲線首先是由二戰中的電子工程師和雷達工程師發明的,用來偵測戰場上的敵軍載具(飛機、船艦),也就是信號檢測理論。之后很快就被引入了心理學來進行信號的知覺檢測。數十年來,ROC分析被用於醫學、無線電、生物學、犯罪心理學領域中,而且最近在機器學習(machine learning)和數據挖掘(data mining)領域也得到了很好的發展。

如何理解ROC

在衡量學習器的泛化性能時,根據學習器的預測結果對樣本排序,按此順序逐個把樣本作為正例進行輸出,每次計算測試樣本的真正率TPR,和假正率FPR並把這兩項作為ROC的縱軸和橫軸.其中真正率衡量實際值為正例的樣本中被正確預測為正例的樣本的比例,假正率表示實際值為負例的樣本中被錯誤的預測為正例的樣本的比例

                                                

具體來說,假設有一個邏輯回歸分類器,根據它的預測結果對樣例排序,我們設初始閾值為最大, 此時所有樣本都被預測為反例,沒有樣本被預測為正例即TP = 0, FP = 0, TPR = 0, FPR = 0; 之后我們不斷調小閾值,在這個過程中被正確預測為正例的樣本和被錯誤預測為正例的樣本都在不斷增多 , 同時被正確預測為反例的樣本和被錯誤預測為反例的樣本不斷減小.因此TPR和FPR會不斷變大.當閾值為最小時,所有樣本被預測為正,沒有樣本被預測為負即FN =0, TN = 0, TPR = 1, FPR = 1; 根據這一系列閾值我們可以得到一系列一一對應的真正率和假正率.

     

當上圖中的ROC曲線接近於(1,0)點,表明模型泛化性能越好,越接近對角線的時候,表明此時模型的預測結果為隨機預測結果.

在實際中ROC曲線沒有這么光滑,更多的會接近下圖的樣子,下圖中的橙色曲線上每一個點對應於一個閾值下的真正率和假正率(圖片來自網絡

      

 

優點

ROC在以下幾個方面會很有用

  1. 可以利用ROC曲線對不同模型進行比較,如果一個模型的ROC曲線被另一個模型的曲線完全包住,則可斷言后者的性能由於前者
  2. ROC曲線下方的面積(AUC)可以用來作為評估模型模型性能的指標.如當兩個模型的ROC曲線發生交叉,則很難說哪一個模型更好,這時候可以用AUC來作為一個比較合理的判據

問題

盡管ROC用處很大但是如果我們的數據中類別分布非常不均衡的時候,ROC就不再適用了.

下圖(a)代表ROC曲線圖(b)代表PR曲線,圖中的曲線都來為同樣的模型在一個非均衡測試集上的預測結果.對於ROC曲線來說越靠近左上方表明模型性能越好,圖(a)中的ROC曲線表明模型性能非常好;對於PR曲線來說越靠近右上方說明模型性能越好,但是看圖(b)中的曲線,很顯然這兩個模型都還有很大的提升空間.同時從圖(a)中我們可以看出兩種算法性能接近,都表現優異,但是圖(b)中Algorithm2的性能表現要明顯優於Algorithm1.

造成這種情況的原因是我們的測試數據集中的反例數目遠遠多於正例的數目,假設負樣本:正樣本=1000:10.在這種情況下,當閾值為最大時,真正率和假正率還是都為0,隨着我們不斷調小閾值真正率和假正率還是在不斷提高, 當閾值最小時真正率和假正率達到最大.因此ROC曲線沒有很好地體現出樣本類別分布不平衡對模型產生的影響,甚至導致對模型性能有錯誤的解釋.這種情況下PR曲線可以給我們提供更精確的參考.

                                                                  

Precision-Recall (PR)

什么是PR曲線

PR曲線常被用在信息提取領域,同時當我們的數據集中類別分布不均衡時我們可以用PR曲線代替ROC.PR曲線的橫軸代表查全率,實際上就是真正率,縱軸代表查准率,表示預測為正例的樣本里實際也為正例的樣本所占的比例.對於查准率和查全率的理解可以參考我的上一篇博文機器學習--如何理解Accuracy, Precision, Recall, F1 score

如何理解PR曲線

與ROC曲線類似,我們根據學習器的預測結果對樣例排序,"最可能"是正例的排在最前邊或者說最左邊,"最不可能"是正例的排在最后邊或者說最右邊.按此順序逐個把樣本作為正例進行輸出,每次計算測試樣本的查准率和查全率並把這兩項作為PR曲線的縱軸和橫軸. 

   

         圖片來源於周志華老師的<機器學習>一書.

當PR曲線越靠近右上方時,表明模型性能越好,與ROC曲線類似,在對不同模型進行比較時,若一個模型的PR曲線被另一個模型的PR曲線完全包住則說明后者的性能優於前者.如上圖中橘色線代表的模型要優於藍色線代表的模型,若模型的PR曲線發生了交叉,則無法直接判斷哪個模型更好.在周志華老師的機器學習上中提到了可以用平衡點.它是查准率=查全率時的取值,如上圖黑色線代表的模型的平衡點要大於橘色線模型代表的平衡點,表明前者優於后者,除此之外更為常用的是F1 score,也就是查准率和查全率的加權平均,F1 = (2*查准率*查全率)/(查准率+查全率)

如何選擇

  • ROC曲線:如果我們的測試數據集類別分布大致均衡的時候我們可以用ROC曲線
  • PR曲線:當數據集類別分布非常不均衡的時候采用PR曲線

 

reference The Relationship Between Precision-Recall and ROC Curves

                How to Use ROC Curves and Precision-Recall Curves for Classification in Python

                  <機器學習> 周志華


免責聲明!

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



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