1. 程式人生 > >機器學習常用評估指標的前世今生

機器學習常用評估指標的前世今生

  在機器學習中,效能指標(Metrics)是衡量一個模型好壞的關鍵,通過衡量模型輸出y_predict和y_true之間的某種“距離”得出的。

  效能指標往往使我們做模型時的最終目標,如準確率,召回率,敏感度等等,但是效能指標常常因為不可微分,無法作為優化的loss函式,因此採用如cross-entropy,rmse等“距離”可微函式作為優化目標,以期待在loss函式降低的時候,能夠提高效能指標。而最終目標的效能指標則作為模型訓練過程中,作為驗證集做決定(early stoping或model selection)的主要依據,與訓練結束後評估本次訓練出的模型好壞的重要標準。

  在機器學習的比賽中,有部分比賽也是用metrics作為排名的依據(當然也有使用loss排名)。

  在使用機器學習演算法的過程中,針對不同的場景需要不同的評價指標,常用的機器學習演算法包括分類,迴歸,聚類等幾大類型,在這裡對常用的指標進行一個簡單的總結,小編總結了前人的很多部落格,知乎等,方便自己學習。當然,需要的同學們也可以看一下。

一,分類

  分類是機器學習中的一類重要問題,很多重要的演算法都在解決分類問題,例如決策樹,支援向量機等,其中二分類問題是分類問題中的一個重要的課題。

  常見的分類模型包括:邏輯迴歸、決策樹、樸素貝葉斯、SVM、神經網路等,模型評估指標包括以下幾種:

1. TPR、FPR&TNR(混淆矩陣)

  在二分類問題中,即將例項分成正類(positive)或負類(negative)。對一個二分問題來說,會出現四種情況。如果一個例項是正類並且也被 預測成正類,即為真正類(True positive),如果例項是負類被預測成正類,稱之為假正類(False positive)。相應地,如果例項是負類被預測成負類,稱之為真負類(True negative),正類被預測成負類則為假負類(false negative)。

  TP(True positive):正確肯定的數目;

  FN(False positive):漏報,沒有正確找到的匹配的數目;

  FP(True negative):誤報,給出的匹配是不正確的;

  TN(false negative):正確拒絕的非匹配對數;

在評估一個二分類模型的效果時,我們通常會用一個稱為混淆矩陣(confusion matrix)的四格表來表示,即如下表所示,1代表正類,0代表負類:

預測1 預測0
實際1 True Positive(TP) False Negative(FN)
實際0 False Positive(FP) True Negative(TN)

  從列聯表引入兩個新名詞。其一是真正類率(true positive rate ,TPR), 計算公式為

TPR = TP / (TP + FN)

  刻畫的是分類器所識別出的 正例項佔所有正例項的比例。

  另外一個是負正類率(false positive rate, FPR),計算公式為

FPR = FP / (FP + TN)

  計算的是分類器錯認為正類的負例項佔所有負例項的比例。

  還有一個真負類率(True Negative Rate,TNR),也稱為specificity,計算公式為

TNR = TN /(FP + TN) = 1 - FPR

2.常用於二分類問題(監督學習)的度量指標

精確率Precision、召回率Recall和F1值

  精確率(正確率)召回率是廣泛用於資訊檢索和統計學分類領域的兩個度量值,用來評價結果的質量。其中精度是檢索出相關文件數與檢索出的文件總數的比率,衡量的是檢索系統的查準率;召回率是指檢索出的相關文件數和文件庫中所有的相關文件數的比率,衡量的是檢索系統的查全率

  一般來說,Precision就是檢索出來的條目(比如:文件、網頁等)有多少是準確的,Recall就是所有準確的條目有多少被檢索出來了,兩者的定義分別如下:

Precision = 提取出的正確資訊條數 /  提取出的資訊條數     

Recall = 提取出的正確資訊條數 /  樣本中的資訊條數    

  為了能夠評價不同演算法的優劣,在Precision和Recall的基礎上提出了F1值的概念,來對Precision和Recall進行整體評價。F1的定義如下:

F1值  = 正確率 * 召回率 * 2 / (正確率 + 召回率) 

  不妨舉這樣一個例子:

  某池塘有1400條鯉魚,300只蝦,300只鱉。現在以捕鯉魚為目的。撒一大網,逮著了700條鯉魚,200只蝦,100只鱉。那麼,這些指標分別如下:

  正確率 = 700 / (700 + 200 + 100) = 70%

  召回率 = 700 / 1400 = 50%

  F1值 = 70% * 50% * 2 / (70% + 50%) = 58.3%

  不妨看看如果把池子裡的所有的鯉魚、蝦和鱉都一網打盡,這些指標又有何變化:

  正確率 = 1400 / (1400 + 300 + 300) = 70%

  召回率 = 1400 / 1400 = 100%

  F1值 = 70% * 100% * 2 / (70% + 100%) = 82.35%        

  由此可見,正確率是評估捕獲的成果中目標成果所佔得比例;召回率,顧名思義,就是從關注領域中,召回目標類別的比例;而F值,則是綜合這二者指標的評估指標,用於綜合反映整體的指標。

  當然希望檢索結果Precision越高越好,同時Recall也越高越好,但事實上這兩者在某些情況下有矛盾的。比如極端情況下,我們只搜尋出了一個結果,且是準確的,那麼Precision就是100%,但是Recall就很低;而如果我們把所有結果都返回,那麼比如Recall是100%,但是Precision就會很低。因此在不同的場合中需要自己判斷希望Precision比較高或是Recall比較高。如果是做實驗研究,可以繪製Precision-Recall曲線來幫助分析。

3. 綜合評價指標F-measure

  Precision和Recall指標有時候會出現的矛盾的情況,這樣就需要綜合考慮他們,最常見的方法就是F-Measure(又稱為F-Score)。

  F-Measure是Precision和Recall加權調和平均

  當引數α=1時,就是最常見的F1。因此,F1綜合了P和R的結果,當F1較高時則能說明試驗方法比較有效。

4. 應用場景:

  準確率和召回率是互相影響的,理想情況下肯定是做到兩者都高,但是一般情況下準確率高、召回率就低,召回率低、準確率高,當然如果兩者都低,那是什麼地方出問題了。當精確率和召回率都高時,F1的值也會高。在兩者都要求高的情況下,可以用F1來衡量。

    1. 地震的預測對於地震的預測,我們希望的是RECALL非常高,也就是說每次地震我們都希望預測出來。這個時候我們可以犧牲PRECISION。情願發出1000次警報,把10次地震都預測正確了;也不要預測100次對了8次漏了兩次。
    2. 嫌疑人定罪基於不錯怪一個好人的原則,對於嫌疑人的定罪我們希望是非常準確的。及時有時候放過了一些罪犯(recall低),但也是值得的。

5. ROC曲線和AUC

  AUC是一種模型分類指標,且僅僅是二分類模型的評價指標。AUC是Area Under Curve的簡稱,那麼Curve就是ROC(Receiver Operating Characteristic),翻譯為"接受者操作特性曲線"。也就是說ROC是一條曲線,AUC是一個面積值。

  ROC曲線應該儘量偏離參考線,越靠近左上越好

  AUC:ROC曲線下面積,參考線面積為0.5,AUC應大於0.5,且偏離越多越好

5.1 為什麼引入ROC曲線?

  Motivation1:在一個二分類模型中,對於所得到的連續結果,假設已確定一個閥值,比如說 0.6,大於這個值的例項劃歸為正類,小於這個值則劃到負類中。如果減小閥值,減到0.5,固然能識別出更多的正類,也就是提高了識別出的正例佔所有正例 的比類,即TPR,但同時也將更多的負例項當作了正例項,即提高了FPR。為了形象化這一變化,引入ROC,ROC曲線可以用於評價一個分類器。

  Motivation2:在類不平衡的情況下,如正樣本90個,負樣本10個,直接把所有樣本分類為正樣本,得到識別率為90%。但這顯然是沒有意義的。單純根據Precision和Recall來衡量演算法的優劣已經不能表徵這種病態問題。

5.2 什麼是ROC曲線?

  ROC(Receiver Operating Characteristic)翻譯為"接受者操作特性曲線"。曲線由兩個變數1-specificity 和 Sensitivity繪製. 1-specificity=FPR,即負正類率。Sensitivity即是真正類率,TPR(True positive rate),反映了正類覆蓋程度。這個組合以1-specificity對sensitivity,即是以代價(costs)對收益(benefits)。顯然收益越高,代價越低,模型的效能就越好。

       此外,ROC曲線還可以用來計算“均值平均精度”(mean average precision),這是當你通過改變閾值來選擇最好的結果時所得到的平均精度(PPV)。

  • x 軸為假陽性率(FPR):在所有的負樣本中,分類器預測錯誤的比例

FPR = \frac {FP}{FP+TN} \\

  • y 軸為真陽性率(TPR):在所有的正樣本中,分類器預測正確的比例(等於Recall)

TPR = \frac {TP}{TP+FN} \\

  為了更好地理解ROC曲線,我們使用具體的例項來說明:

  如在醫學診斷中,判斷有病的樣本。那麼儘量把有病的揪出來是主要任務,也就是第一個指標TPR,要越高越好。而把沒病的樣本誤診為有病的,也就是第二個指標FPR,要越低越好。

  不難發現,這兩個指標之間是相互制約的。如果某個醫生對於有病的症狀比較敏感,稍微的小症狀都判斷為有病,那麼他的第一個指標應該會很高,但是第二個指標也就相應地變高。最極端的情況下,他把所有的樣本都看做有病,那麼第一個指標達到1,第二個指標也為1。

  我們以FPR為橫軸,TPR為縱軸,得到如下ROC空間。

  我們可以看出,左上角的點(TPR=1,FPR=0),為完美分類,也就是這個醫生醫術高明,診斷全對。點A(TPR>FPR),醫生A的判斷大體是正確的。中線上的點B(TPR=FPR),也就是醫生B全都是蒙的,蒙對一半,蒙錯一半;下半平面的點C(TPR<FPR),這個醫生說你有病,那麼你很可能沒有病,醫生C的話我們要反著聽,為真庸醫。上圖中一個閾值,得到一個點。現在我們需要一個獨立於閾值的評價指標來衡量這個醫生的醫術如何,也就是遍歷所有的閾值,得到ROC曲線。

  假設下圖是某醫生的診斷統計圖,為未得病人群(上圖)和得病人群(下圖)的模型輸出概率分佈圖(橫座標表示模型輸出概率,縱座標表示概率對應的人群的數量),顯然未得病人群的概率值普遍低於得病人群的輸出概率值(即正常人診斷出疾病的概率小於得病人群診斷出疾病的概率)。

  豎線代表閾值。顯然,圖中給出了某個閾值對應的混淆矩陣,通過改變不同的閾值 1.0 \rightarrow 0 ,得到一系列的混淆矩陣,進而得到一系列的TPR和FPR,繪製出ROC曲線。

  閾值為1時,不管你什麼症狀,醫生均未診斷出疾病(預測值都為N),此時綠色和紅色區域的面積為 0,因此 FPR=TPR=0 ,位於左下。隨著閾值的減小,紅色和綠色區域增大,紫色和藍色區域減小。閾值為 0 時,不管你什麼症狀,醫生都診斷結果都是得病(預測值都為P),此時綠色和紅色區域均佔整個區域,即紫色和藍色區域的面積為 0,此時 FPR=TPR=1 ,位於右上。

  還是一開始的那幅圖,假設如下就是某個醫生的診斷統計圖,直線代表閾值。我們遍歷所有的閾值,能夠在ROC平面上得到如下的ROC曲線。

  曲線距離左上角越近,證明分類器效果越好。

 

  如上,是三條ROC曲線,在0.23處取一條直線。那麼,在同樣的低FPR=0.23的情況下,紅色分類器得到更高的PTR。也就表明,ROC越往上,分類器效果越好。我們用一個標量值AUC來量化它。

5.3 什麼是AUC?

  AUC值為ROC曲線所覆蓋的區域面積,顯然,AUC越大,分類器分類效果越好。

  AUC = 1,是完美分類器,採用這個預測模型時,不管設定什麼閾值都能得出完美預測。絕大多數預測的場合,不存在完美分類器。

  0.5 < AUC < 1,優於隨機猜測。這個分類器(模型)妥善設定閾值的話,能有預測價值。

  AUC = 0.5,跟隨機猜測一樣(例:丟銅板),模型沒有預測價值。

  AUC < 0.5,比隨機猜測還差;但只要總是反預測而行,就優於隨機猜測。

  以下為ROC曲線和AUC值得例項:

  AUC的物理意義:假設分類器的輸出是樣本屬於正類的socre(置信度),則AUC的物理意義為,任取一對(正、負)樣本,正樣本的score大於負樣本的score的概率。

  AUC的物理意義正樣本的預測結果大於負樣本的預測結果的概率。所以AUC反應的是分類器對樣本的排序能力。

  另外值得注意的是,AUC對樣本類別是否均衡並不敏感,這也是不均衡樣本通常用AUC評價分類器效能的一個原因。

  下面從一個小例子解釋AUC的含義:小明一家四口,小明5歲,姐姐10歲,爸爸35歲,媽媽33歲建立一個邏輯迴歸分類器,來預測小明家人為成年人概率,假設分類器已經對小明的家人做過預測,得到每個人為成人的概率。

  1. AUC更多的是關注對計算概率的排序,關注的是概率值的相對大小,與閾值和概率值的絕對大小沒有關係

  例子中並不關注小明是不是成人,而關注的是,預測為成人的概率的排序。

5.4 怎樣計算AUC?

  第一種方法:AUC為ROC曲線下的面積,那我們直接計算面積可得。面積為一個個小的梯形面積之和。計算的精度與閾值的精度有關。

  第二種方法:根據AUC的物理意義,我們計算正樣本score大於負樣本的score的概率。取N*M(N為正樣本數,M為負樣本數)個二元組,比較score,最後得到AUC。時間複雜度為O(N*M)。

  第三種方法:與第二種方法相似,直接計算正樣本score大於負樣本的概率。我們首先把所有樣本按照score排序,依次用rank表示他們,如最大score的樣本,rank=n(n=N+M),其次為n-1。那麼對於正樣本中rank最大的樣本,rank_max,有M-1個其他正樣本比他score小,那麼就有(rank_max-1)-(M-1)個負樣本比他score小。其次為(rank_second-1)-(M-2)。最後我們得到正樣本大於負樣本的概率為

  時間複雜度為O(N+M)。

二,迴歸

  在迴歸中,我們想根據連續資料來進行預測。例如,我們有包含不同人員的身高、年齡和性別的列表,並想預測他們的體重。或者,我們可能有一些房屋資料,並想預測某所住宅的價值。手頭的問題在很大程度上決定著我們如何評估模型。

  以下為一元變數和二元變數的線性迴歸示意圖:

  那麼怎麼來衡量回歸模型的好壞呢?

  我們首先想到的是採用殘差(實際值與預測值的差值)的均值來衡量,即:

  那麼問題來了:使用殘差的均值合理嗎?

  當實際值分佈在擬合曲線兩側時候,對於不同樣本而言有正有負,相互抵消,因此我們想到採用預測值和真實值之間的距離來衡量。

2.1 平均絕對誤差(MAE)

  既然使用了MAE,那他有什麼不足?

  MAE雖然較好的衡量回歸模型的好壞,但是絕對值的存在導致函式不光滑,在某些點上不能求導,可以考慮將絕對值改為殘差的平方,這就是均方誤差。

2.2 平均平方誤差(MSE)

  那麼還有沒有比MSE更合理一些的指標?

  MSE和方差的性質比較類似,與我們的目標變數的量綱不一致,為了保證量綱一致性,我們需要對MSE進行開方,得到RMSE。

2.3 均方根誤差(RMSE)

  RMSE雖然廣為使用,但是其存在一些缺點,因為它是使用平均誤差,而平均值對異常點(outliers)較敏感,如果迴歸器對某個點的迴歸值很不理性,那麼它的誤差則較大,從而會對RMSE的值有較大影響,即平均值是非魯棒的。

  開方之後的MSE稱為RMSE,是標準差的表兄弟,如下式所示:

{\rm RMSE}(y, \hat{y})=\sqrt {\frac{1}{m}\sum\limits_{i=1}^{m}(y_i-\hat{y}_i)^2} \\

  RMSE有沒有不足的地方,有沒有規範化(無量綱化的指標)?

  上面的幾種衡量標準的取值大小與具體的應用場景有關係,很難定義統一的規則來衡量模型的好壞。比如說利用機器學習演算法預測上海的房價RMSE在2000元,我們是可以接受的,但是當四五線城市的房價RMSE為2000元,我們還可以接受嗎?下面介紹的決定係數就是一個無量綱化的指標。

2.4 決定係數

  變數之所以有價值,就是因為變數是變化的。什麼意思呢?比如說一組因變數為[0, 0, 0, 0, 0],顯然該因變數的結果是一個常數0,我們也沒有必要建模對該因變數進行預測。假如一組的因變數為[1, 3, 7, 10, 12],該因變數是變化的,也就是有變異,因此需要通過建立迴歸模型進行預測。這裡的變異可以理解為一組資料的方差不為0。

  決定係數又稱為 R^2 score,反應因變數的全部變異能通過迴歸關係被自變數解釋的比例。

\text{SST} = \sum \limits_i^m(y_i - \bar y)^2 \qquad \text{SST = total sum of squares}

\text{SSR} = \sum \limits_i^m(\hat y_i - \bar y)^2 \qquad \text{SSR = sum of due to regression}

\text{SSE} = \sum \limits_i^m(\hat y_i - y_i)^2 \qquad \text{SSE = sum of due to erros}

\text{SST = SSR + SSE}

R^2(y,\hat{y})= \frac{\rm SSR}{\rm SST}   如果結果是0,就說明模型預測不能預測因變數。   如果結果是1。就說明是函式關係。   如果結果是0-1之間的數,就是我們模型的好壞程度。

  化簡上面的公式 ,分子就變成了我們的均方誤差MSE,下面分母就變成了方差:\begin{align}R^2(y,\hat{y}) &= 1 - \frac{\rm SSE}{\rm SST} \\&=1-\frac{\sum\limits_{i=1}^{m}(y_i-\hat{y}_i)^2}{\sum\limits_{i=1}^{m}(y_i-\bar{y})^2} \\&=1-\frac{\sum\limits_{i=1}^{m}(y_i-\hat{y}_i)^2/m}{\sum\limits_{i=1}^{m}(y_i-\bar{y})^2/m} \\&= 1 - \frac{\rm MSE(\hat y, y)}{\rm Var(y)} \end{align}\\

 

   以上的評估指標有沒有缺陷,如果有,該如何改進呢?

  以上的評估指標是基於誤差的均值對進行評估的,均值對異常點(outliers)較敏感,如果樣本中有一些異常值出現,會對以上指標的值有較大影響,即均值是非魯棒的。

2.5 解決評估指標魯棒性問題

我們通常用一下兩種方法解決評估指標的魯棒性問題:

  • 剔除異常值

設定一個相對誤差 \frac{|y_i-\hat{y_i}|}{y_i} ,當該值超過一定的閾值時,則認為其是一個異常點,剔除這個異常點,將異常點剔除之後。再計算平均誤差來對模型進行評價。

  • 使用誤差的分位數來代替,

如利用中位數來代替平均數。例如 MAPE:

MAPE=median(|y_i-\hat{y_i}|/y_i) \\   MAPE是一個相對誤差的中位數,當然也可以使用別的分位數。

2.6 解釋變異

三,聚類

  常見的聚類模型有KMeans、密度聚類、層次聚類等,主要從簇內的稠密成都和簇間的離散程度來評估聚類的效果,評估指標包括:

1 . 蘭德指數

  蘭德指數(Rand index)需要給定實際類別資訊C,假設K是聚類結果,a表示在CK中都是同類別的元素對數,b表示在CK中都是不同類別的元素對數,則蘭德指數為:

     

  其中資料集中可以組成的總元素對數,RI取值範圍為[0,1],值越大意味著聚類結果與真實情況越吻合。

  對於隨機結果,RI並不能保證分數接近零。為了實現“在聚類結果隨機產生的情況下,指標應該接近零”,調整蘭德係數(Adjusted rand index)被提出,它具有更高的區分度:

     

  ARI取值範圍為[1,1],值越大意味著聚類結果與真實情況越吻合。從廣義的角度來講,ARI衡量的是兩個資料分佈的吻合程度。

2. 互資訊

  互資訊(Mutual Information)也是用來衡量兩個資料分佈的吻合程度。假設UU與VV是對NN個樣本標籤的分配情況,則兩種分佈的熵(熵表示的是不確定程度)分別為:

  

  利用基於互資訊的方法來衡量聚類效果需要實際類別資訊,MI與NMI取值範圍為[0,1],AMI取值範圍為[1,1],它們都是值越大意味著聚類結果與真實情況越吻合。

3. 輪廓係數

  輪廓係數(Silhouette coefficient)適用於實際類別資訊未知的情況。對於單個樣本,設aa是與它同類別中其他樣本的平均距離,bb是與它距離最近不同類別中樣本的平均距離,輪廓係數為:

    

  對於一個樣本集合,它的輪廓係數是所有樣本輪廓係數的平均值。

  輪廓係數取值範圍是[1,1]

四,資訊檢索

  資訊檢索評價是對資訊檢索系統效能(主要滿足使用者資訊需求的能力)進行評估,與機器學習也有較大的相關性。

總結

  上面介紹了非常多的指標,實際應用中需要根據具體問題選擇合適的衡量指標。那麼具體工作中如何快速使用它們呢?優秀的Python機器學習開源專案Scikit-learn實現了上述絕指標的大多數,使用起來非常方便。