ROC曲線學習總結最近在學習機器學習基礎知識部分的時候,看到了用于評估模型性能的ROC曲線,想起來之前上課的時候聽老師提起過,當時沒有認真去看,所以這次大體上了解了一下,來談談自己的看法,并做些總結。
1. ROC曲線(Receiver Operating Characteristic)的概念和繪制 ROC的全稱是“受試者工作特征”(Receiver Operating Characteristic)曲線,首先是由二戰(zhàn)中的電子工程師和雷達工程師發(fā)明的,用來偵測戰(zhàn)場上的敵軍載具(飛機、船艦),也就是信號檢測理論。之后很快就被引入了心理學來進行信號的知覺檢測。此后被引入機器學習領域,用來評判分類、檢測結果的好壞。因此,ROC曲線是非常重要和常見的統(tǒng)計分析方法。 首先介紹一下在模型評估上的一些基本概念: 真實情況 | 預測結果 | 含義 |
統(tǒng)計量 |
---|
正例 | 反例 |
正例 | TP(將正例正確預測為正例) | FN(將正例錯誤預測為負例) | TP + FN 表示實際數(shù)據(jù)集中正樣本的數(shù)量 | 召回率Recall / 靈敏度Sensitivity / TPR = TP/(TP+FN), 漏診率 = 1 - 靈敏度 | 反例 | FP(將負例錯誤的預測為正例) | TN(將負例正確的預測為負例) | FP + TN 表示實際數(shù)據(jù)集中負樣本的數(shù)量 | FPR = FP/(FP+TN), 特異度(Specificity) = 1 - FPR = TN/(FP+TN) |
加和含義 | TP + FP 表示預測的正類樣本數(shù) |
FN + TN 表示預測的負類樣本數(shù) | TP + FN + FP + TN 表示樣本總數(shù) |
|
統(tǒng)計量 | 精確率Precision = TP/(TP+FP) |
|
| 正確率Accuracy = (TP+TN)/(TP+TN+FP+FN), 錯誤率 = (FP+FN)/(TP+TN+FP+FN), F-measure = 2*(Precision*Recall)/(Precision+Recall) |
其中最重要的兩個公式如下: TPR=TPTP+FN,FPR=FPFP+TNTPR=TPTP+FN,FPR=FPFP+TNTPR = \frac{TP}{TP+FN} ,FPR = \frac{FP}{FP+TN}TPR=TP+FNTP,FPR=FP+TNFP 在ROC曲線圖中,每個點以對應的FPRFPRFPRFPR值為橫坐標,以TPRTPRTPRTPR值為縱坐標 ROC曲線的繪制步驟如下: 假設已經(jīng)得出一系列樣本被劃分為正類的概率Score值,按照大小排序。 從高到低,依次將“Score”值作為閾值threshold,當測試樣本屬于正樣本的概率大于或等于這個threshold時,我們認為它為正樣本,否則為負樣本。舉例來說,對于某個樣本,其“Score”值為0.6,那么“Score”值大于等于0.6的樣本都被認為是正樣本,而其他樣本則都認為是負樣本。 每次選取一個不同的threshold,得到一組FPR和TPR,以FPR值為橫坐標和TPR值為縱坐標,即ROC曲線上的一點。 根據(jù)3中的每個坐標點,畫圖。
ROC曲線繪制實例 1、分析數(shù)據(jù) y_true = [0, 0, 1, 1];scores = [0.1, 0.4, 0.35, 0.8]; 2、列表 樣本 | 預測屬于P的概率(score) | 真實類別 |
---|
y[0] | 0.1 | N | y[1] | 0.4 | N | y[2] | 0.35 | P | y[3] | 0.8 | P |
3、將截斷點依次取為score值,計算TPR和FPR。 當截斷點為0.1時: 說明只要score>=0.1,它的預測類別就是正例。 因為4個樣本的score都大于等于0.1,所以,所有樣本的預測類別都為P。 scores = [0.1, 0.4, 0.35, 0.8];y_true = [0, 0, 1, 1];y_pred = [1, 1, 1, 1]; 正例與反例信息如下: 由此可得: TPR = TP/(TP+FN) = 1; FPR = FP/(TN+FP) = 1; 當截斷點為0.35時: scores = [0.1, 0.4, 0.35, 0.8];y_true = [0, 0, 1, 1];y_pred = [0, 1, 1, 1]; 正例與反例信息如下: 由此可得: TPR = TP/(TP+FN) = 1; FPR = FP/(TN+FP) = 0.5; 當截斷點為0.4時: scores = [0.1, 0.4, 0.35, 0.8];y_true = [0, 0, 1, 1];y_pred = [0, 1, 0, 1]; 正例與反例信息如下: 由此可得: TPR = TP/(TP+FN) = 0.5; FPR = FP/(TN+FP) = 0.5; 當截斷點為0.8時: scores = [0.1, 0.4, 0.35, 0.8];y_true = [0, 0, 1, 1];y_pred = [0, 0, 0, 1]; 正例與反例信息如下: 由此可得: TPR = TP/(TP+FN) = 0.5; FPR = FP/(TN+FP) = 0; 4、根據(jù)TPR、FPR值,以FPR為橫軸,TPR為縱軸畫圖。 2. 利用ROC曲線評價模型性能——AUC(Area Under Curve) AUC表示ROC曲線下的面積,主要用于衡量模型的泛化性能,即分類效果的好壞。AUC是衡量二分類模型優(yōu)劣的一種評價指標,表示正例排在負例前面的概率。一般在分類模型中,預測結果都是以概率的形式表現(xiàn),如果要計算準確率,通常都會手動設置一個閾值來將對應的概率轉(zhuǎn)化成類別,這個閾值也就很大程度上影響了模型準確率的計算。 之所以采用AUC來評價,主要還是考慮到ROC曲線本身并不能直觀的說明一個分類器性能的好壞,而AUC值作為一個數(shù)量值,具有可比較性,可以進行定量的比較。 AUC值的計算方法: 將坐標點按照橫坐標FPR排序 。 計算第iiii個坐標點和第i+1i+1i+1i+1個坐標點的間距dxdxdxdx 。 獲取第iiii或者i+1i+1i+1i+1個坐標點的縱坐標y。 計算面積微元ds=ydxds=ydxds=ydxds=ydx。 對面積微元進行累加,得到AUC。
AUC值對模型性能的判斷標準: AUC = 1,是完美分類器,采用這個預測模型時,存在至少一個閾值能得出完美預測。絕大多數(shù)預測的場合,不存在完美分類器。 0.5 < AUC < 1,優(yōu)于隨機猜測。這個分類器(模型)妥善設定閾值的話,能有預測價值。 AUC = 0.5,跟隨機猜測一樣(例:丟銅板),模型沒有預測價值。 AUC < 0.5,比隨機猜測還差;但只要總是反預測而行,就優(yōu)于隨機猜測。
3. 利用ROC曲線選擇最佳模型首先了解一下ROC曲線圖上很重要的四個點: 第一個點(0,1)(0,1)(0,1)(0,1),即FPR=0, TPR=1,這意味著FN(False Negative)=0,并且FP(False Positive)=0。意味著這是一個完美的分類器,它將所有的樣本都正確分類。 第二個點(1,0)(1,0)(1,0)(1,0),即FPR=1,TPR=0,意味著這是一個最糟糕的分類器,因為它成功避開了所有的正確答案。 第三個點(0,0)(0,0)(0,0)(0,0),即FPR=TPR=0,即FP(False Positive)=TP(True Positive)=0,可以發(fā)現(xiàn)該分類器預測所有的樣本都為負樣本(Negative)。 第四個點(1,1)(1,1)(1,1)(1,1),即FPR=TPR=1,分類器實際上預測所有的樣本都為正樣本。
從上面給出的四個點可以發(fā)現(xiàn),==ROC曲線圖中,越靠近(0,1)的點對應的模型分類性能越好。==而且可以明確的一點是,ROC曲線圖中的點對應的模型,它們的不同之處僅僅是在分類時選用的閾值(Threshold)不同,每個點所選用的閾值都對應某個樣本被預測為正類的概率值。 那么我們?nèi)绾胃鶕?jù)ROC曲線圖定量的找到當前最優(yōu)的分類模型呢? 3.1 不同模型之間選擇最優(yōu)模型 當然最直觀的比較方式就是基于AUC值,不同的模型對應的ROC曲線中,AUC值大的模型性能自然相對較好。而當AUC值近似相等時,有兩種情況:第一種是ROC曲線之間沒有交點;第二種是ROC曲線之間存在交點。在兩個模型AUC值相等時,并不代表兩個模型的分類性能也相等。 ROC曲線之間沒有交點 如下圖所示,A,B,C三個模型對應的ROC曲線之間交點,且AUC值是相等的,此時明顯更靠近(0,1)(0,1)(0,1)(0,1)點的A模型的分類性能會更好。 
ROC曲線之間存在交點 如下圖所示,模型A、B對應的ROC曲線相交卻AUC值相等,此時就需要具體問題具體分析:當需要高Sensitivity值時,A模型好過B;當需要高Specificity值時,B模型好過A。 
3.2 同一模型中選擇最優(yōu)點對應的最優(yōu)模型 根據(jù)前面的內(nèi)容,我們可以知道,在同一條ROC曲線上,越靠近(0,1)(0,1)(0,1)(0,1)的坐標點對應的模型性能越好,因為此時模型具有較高的真正率和較低的假正率。那么我們?nèi)绾味康膹囊粭lROC曲線上找到這個最優(yōu)的點呢?通常需要借助ISO精度線來找到這個最優(yōu)的點 ISO精度線(ISO Accuracy Lines) ISO精度線實際上一類斜率確定而截距不確定的直線,設ISO精度線的方程為y=ax+by=ax+by=ax+by=ax+b,其中aaaa為直線的斜率,bbbb為直線的截距。 a=NEGPOSa=NEGPOSa = \frac{NEG}{POS}a=POSNEG 其中,NEGNEGNEGNEG為數(shù)據(jù)集中負樣本的數(shù)目,POSPOSPOSPOS為數(shù)據(jù)集中正樣本的數(shù)目 如下圖所示,當a=0.5a=0.5a=0.5a=0.5時,圖中的紅線都可以作為ISO精度線 
根據(jù)ISO精度線確定最優(yōu)點 因為ROC曲線上的點都是在同一模型下改變分類閾值得到的,所以在同一條ROC曲線上確定最優(yōu)點的過程,其實就是確定最佳分類閾值的過程,這個閾值能夠讓模型在高真正率和低假正率之間取得最好的平衡,即模型的分類性能最好。 根據(jù)ISO精度線確定最優(yōu)點的步驟: 首先得到ISO精度線的斜率 a=NEGPOSa=NEGPOSa = \frac{NEG}{POS}a=POSNEG 初始化截距b=0b=0b=0b=0,即此時的直線方程為y=axy=axy=axy=ax 逐漸增大截距,即把直線向左上角移動,直到直線與ROC曲線只有一個交點,則這個交點即為我們要找的最優(yōu)點,這個最優(yōu)點對應的分類閾值即為使得當前模型性能最優(yōu)的分類閾值(本來剛開始考慮這個點應該是切點,不過后來想想應該不是,因為ROC圖本身是不連續(xù)的,相鄰節(jié)點間都是通過直線連接的)
3.3 當測試集中的正負樣本的分布變換的時候,ROC曲線能夠保持不變 之所以把ROC曲線的這個特性特意提出來講,是因為我覺得這是ROC曲線和AUC這個評價標準最大的優(yōu)勢所在。其他的如正確率、精確率、召回率和F值都會受到樣本分布的影響,即對于同一模型,采用這些指標進行性能評估的話,如果輸入的樣本中正負樣本分布發(fā)生變化,則最終的正確率等參數(shù)也會變化,這種最終結果會被輸入樣本分布影響的特性,顯然使得這些指標在評估某個樣本性能時會對輸入樣本產(chǎn)生依賴,不能很客觀的反應模型的性能(所以這也是為什么一個可信數(shù)據(jù)集非常重要的原因,因為數(shù)據(jù)集不僅影響對模型的訓練,也會直接影響對模型性能的評估?;谶@兩點,我們就可以斷言,對于同一個模型,更可信的數(shù)據(jù)集肯定能夠取得更好的效果。) 而對應于同一個模型,當其中的正負樣本分布發(fā)生變化時,ROC曲線能夠基本保持不變,這就保證至少在模型評估階段,樣本分布不會對這一過程產(chǎn)生太大的影響。 那么如何理解這種不變性呢?網(wǎng)上找了很多博客都沒有人解釋過,我也只能簡要的談談我的想法,日后如果看到了比較權威的解釋再來補充吧。 首先,ROC曲線每個點都是以某個閾值對應的TPR為縱坐標,以對應FPR為橫坐標,所以不變性肯定是反映在樣本分布改變時,ROC曲線圖中的點隨著閾值變化橫縱坐標的變化保持一致。 舉個例子,當一個數(shù)據(jù)集中有PPPP個正樣本和NNNN個負樣本時,對應于某個閾值ThresholdThresholdThresholdThreshold,其TPRTPRTPRTPR和FPRFPRFPRFPR計算公式如下: TPR=TPTP+FN,FPR=FPFP+TNTPR=TPTP+FN,FPR=FPFP+TNTPR = \frac{TP}{TP+FN} ,FPR = \frac{FP}{FP+TN}TPR=TP+FNTP,FPR=FP+TNFP 當我們將負樣本的數(shù)目增加十倍,即此時數(shù)據(jù)集中有PPPP個正樣本和10?N10?N10*N10?N個負樣本,根據(jù)上面的計算公式可知,在負樣本數(shù)量增加十倍之后, TPRTPRTPRTPR值的取值范圍是不變,因為TP+FNTP+FNTP+FNTP+FN不變,同時TPTPTPTP的取值為[0,P][0,P][0,P][0,P]之間的整數(shù),所以TPRTPRTPRTPR的離散取值區(qū)間在負樣本增加的情況下是不變的。 在TPRTPRTPRTPR值不變的條件下,此時對應的ThresholdThresholdThresholdThreshold閾值基本不變(如果變化,則TPRTPRTPRTPR值不可能不變),其對應的FPRFPRFPRFPR值的取值范圍也是不變的。根據(jù)樣本獨立同分布的假設,負樣本數(shù)目改變,但負樣本的預測概率分布是不變的,即當ThresholdThresholdThresholdThreshold不變時,FPFPFPFP值和FP+TNFP+TNFP+TNFP+TN值應該是等比例變化的,此時FPRFPRFPRFPR值不變。
綜上,我們可以從感性認識上證明當樣本的分布發(fā)生變化時,ROC曲線能夠基本保持不變。 接下來給出一個實例,對比ROC曲線和PR(Precision-Recall)曲線在樣本分布變化時的不同。下圖中,(a)和(b)分別為從初始測試集中得到的ROC曲線和PR曲線,?和(d)分別為負樣本增加十倍之后得到的ROC曲線和PR曲線。由圖中可知,當樣本分布變化時,ROC曲線基本沒有變化,而PR曲線則變化很大,這充分說明了ROC曲線在模型性能評估上的優(yōu)勢。 
ROC曲線在多分類問題上的推廣 經(jīng)典的ROC曲線適用于對二分類問題進行模型評估,通常將它推廣到多分類問題的方式有兩種: 對于每種類別,分別計算其將所有樣本點的預測概率作為閾值所得到的TPRTPRTPRTPR和FPRFPRFPRFPR值(是這種類別為正,其他類別為負),最后將每個取定的閾值下,對應所有類別的TPRTPRTPRTPR值和FPRFPRFPRFPR值分別求平均,得到最終對應這個閾值的TPRTPRTPRTPR和FPRFPRFPRFPR值 首先,對于一個測試樣本:1)標簽只由0和1組成,1的位置表明了它的類別(可對應二分類問題中的‘’正’’),0就表示其他類別(‘’負‘’);2)要是分類器對該測試樣本分類正確,則該樣本標簽中1對應的位置在概率矩陣P中的值是大于0對應的位置的概率值的。
上面的兩個方法得到的ROC曲線是不同的,當然曲線下的面積AUC也是不一樣的。 在python中,方法1和方法2分別對應sklearn.metrics.roc_auc_score函數(shù)中參數(shù)average值為’macro’和’micro’的情況。
|