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