機器學習中的評估指標與損失函數

分類指標

模型評估

準確率accuracy是指分類正確的樣本數與總樣本數之比,即。其缺點在於,當樣本類別比例非常不均衡時,如正負樣本比爲1:9,全部預測爲負就可以得到90%的準確率。爲了解決這個問題,可以使用平均準確率(每個類別樣本準確率的算術平均)。

精確率和召回率多用於二分類,可結合混淆矩陣進行理解:

TP和TN是預測正確的樣本,FP和FN是預測錯誤的樣本,TP+TN+FP+FN=樣本總數。

精確率(查準率,Precision)是指分類器分類正確的正樣本數與判定爲正樣本的樣本數之比。召回率(查全率,Recall)是指分類正確的正樣本數與真正的正樣本數之比:

在信息檢索中,精確率關注的是檢索出的信息中有多少比例是用戶感興趣的,召回率關注的是用戶感興趣的信息中有多少被檢索出來了,兩者都越高越好,但精確率與召回率是既矛盾又統一的兩個指標:精確率高時,召回率低;精確率低時,召回率高。如在搜索網頁時,如果只返回最相關的那一個網頁,那精確率就是100%,而召回率就很低;如果返回全部網頁,那召回率爲100%,而精確率就很低。

以精確率P爲縱軸,以召回率R爲橫軸、可以畫出P-R曲線。許多機器學習模型的輸出是預測樣本爲正例的概率,如果對所有的預測結果按照預測概率進行降序排序,給定一個閾值可以將預測結果劃分爲兩部分,大於閾值的爲正例,小於閾值的爲負例。可以根據需要選取不同的閾值,如果重視精確率,可以設定一個較高的閾值,如果更重視召回率,可以設定一個較低的閾值,整條P-R曲線是通過將閾值從高到低移動而生成的。

P-R曲線越靠近右上角性能越好,曲線下的而積叫AP分數(Average Precision Score,平均精確率分數)。對比不同模型的AP分數,能在一定程度上反映模型的精確率和召回率都高的比例,但這個值通常不容易計算,可以使用綜合考慮精確率和召回率的指標:F1值和ROC曲線。

F1值

F1值是精準率和召回率的調和平均值,它定義爲

F值可泛化爲對精確率和召回率賦不同權重進行加權調和,不同α值表示對精確率和召回率的不同偏好,α<1精確率有更大影響,α>1召回率有更大影響:

ROC與AUC

ROC(受試者工作特徵,Receiver Operating Characteristic),縱座標爲真正率(True Positive Rate,TPR)表示預測爲正樣本並且預測正確的概率,TPR越高越好;橫座標爲假正率(False Positive Rate,FPR)表示預測爲正樣本但是預測錯了的概率,FPR越低越好。公式爲:其中,P是真實的正樣本數,N是真實的負樣本數,TP是P個正樣本中被分類器預測爲正樣本的個數,FP是N個負樣本中被分類器預測爲正樣本的個數。

ROC曲線的繪製:

  • ROC曲線是通過不斷移動分類器的閾值來生成曲線上的一組關鍵點的,根據模型輸出的預測概率對樣本進行排序(從高到低),以每條樣本的預測概率爲閾值,計算對應的FPR和TPR作爲ROC曲線的橫縱座標,然後用線段連接。當數據量少時,繪製的ROC曲線不平滑;當數據量大時,繪製的ROC曲線會趨於平滑。ROC曲線越靠近左上角性能越好。左上角座標爲(0,1),即FPR=0, TPR=1,此時FN=0,FP=0,模型對所有樣本分類正確。
  • 更直觀的方法:根據樣本標籤統計出正負樣本的數量P和N,把橫縱軸的刻度間隔分別設置爲1/N和1/P,再根據模型輸出的預測概率對樣本進行排序(從高到低);依次遍歷樣本,同時從零點開始繪製ROC曲線,每遇到一個正樣本就沿縱軸方向走一步,每遇到一個負樣本就沿橫軸方向走一步,直到遍歷完所有樣本,曲線最終停在(1,1)這個點,整個ROC曲線繪製完成。

爲什麼使用AUC進行模型評估?

  • 使用精確率,召回率和F1值進行模型評估時需要設定閾值,閾值的大小會影響模型的泛化能力,使用AUC評估模型性能時可以不設定閾值;
  • AUC計算主要與排序有關,它對排序敏感,而對預測分數沒那麼敏感(排序結果更重要,不管預測值是多少,只要正例的預測概率都大於負例就行,將預測概率同乘以1.2,AUC值不變)。

AUC是否可以直接用作損失函數去優化呢?

可以,在一定條件下,RankBoost算法優化的全局函數就是AUC,可以使用RankBoost算法優化AUC的近似值或對AUC進行局部優化。(paper);xgboost提供了直接優化AUC的功能,目標函數設置爲:objective = 'rank:pairwise'

P-R曲線與ROC曲線對比

當正負樣本的分佈發生變化時,P-R曲線的形狀一般會發生比較劇烈的變化,而ROC曲線的形狀能夠基本保持不變。這使得ROC曲線能夠儘量降低不同測試集帶來的干擾,更加客觀地衡量模型本身的性能。

  1. AUC ( Area Under Roc Curve )是ROC曲線下的面積,取值越大說明模型越可能將正樣本排在負樣本前面。
  2. AUC物理意義爲:模型將某個隨機正類別樣本排列在某個隨機負類別樣本之上的概率。從所有正樣本中隨機挑選一個樣本,模型將其預測爲正樣本的概率爲P1;從所有負樣本中隨機挑選一個樣本,模型將其預測爲正樣本的概率爲P0。P1>P0的概率就等於AUC 。
  3. AUC反應的是模型對於樣本的排序能力(根據樣本預測爲正類的概率來排序)。如:AUC=0.8表示:給定一個正樣本和一個負樣本,在 80% 的情況下,模型對正樣本預測爲正類的概率大於對負樣本預測爲正類的概率。將正樣本排在負樣本前面的概率
  4. AUC和Wilcoxon Test of Ranks等價。測試任意一個正類樣本和一個負類樣本,正類樣本的預測值有多大的概率大於負類樣本的預測值。
  5. AUC和基尼(Gini)係數滿足等式Gini+1=2·AUC
  6. AUC在樣本不平衡的條件下依然適用。如:在反欺詐場景下,假設正常用戶爲正類(設佔比 99.9%),欺詐用戶爲負類(設佔比 0.1%)。如果使用準確率評估,則將所有用戶預測爲正類即可獲得 99.9%的準確率。這並不是一個很好的預測結果,因爲欺詐用戶全部未能找出。使用AUC評估,則此時FPR=1,TPR=1,對應的AUC=0.5 。AUC成功的指出了這並不是一個很好的預測結果。
  7. AUC對於均勻採樣不敏感。如:上述反欺詐場景中,假設對正常用戶進行均勻的降採樣。任意給定一個負樣本N1,設模型對其預測爲正類的概率爲P1。降採樣前後,由於是均勻採樣,因此預測爲正類的概率大於P1和小於P1的真正樣本的比例沒有發生變化。因此AUC 保持不變。但是如果是非均勻的降採樣,則預測爲正類的概率大於P1和小於P1的真正樣本的比例會發生變化,這也會導致AUC 發生變化。
  8. 正負樣本之間的預測爲正類概率之間的差距越大,則AUC 越高。因爲這表明正負樣本之間排序的把握越大,區分度越高。如:在電商場景中,點擊率模型的AUC 要低於購買轉化模型的AUC 。因爲點擊行爲的成本低於購買行爲的成本,所以點擊率模型中正負樣本的差別要小於購買轉化模型中正負樣本的差別。

AUC的計算

 

餘弦相似度

在機器學習中,常使用餘弦相似度分析兩個特徵向量之間的相似性,其取值範圍是[−1,1],相同的兩個向量之間的相似度爲1;1減去餘弦相似度可以得到餘弦距離,取值範圍爲[0,2],相同的兩個向量餘弦距離爲0。對於兩個向量A和B,其餘弦相似度定義爲,即兩個向量夾角的餘弦,關注的是向量之間的角度關係,並不關心它們的絕對大小。

餘弦相似度與歐氏距離異同點:

特徵向量經過歸一化後,歐氏距離與餘弦距離有着單調的關係,此時選擇距離最小(相似度最大)的近鄰,使用餘弦相似度和歐氏距離的結果是相同的。即其中|| A−B ||2表示歐氏距離,cos(A,B)表示餘弦相似度,(1−cos(A,B))表示餘弦距離。

在文本、圖像、視頻等領域,研究的對象的特徵維度往往很高,歐氏距離受維度的影響較大,範圍不固定,含義比較模糊,而餘弦相似度在高維情況下依然保持“相同時爲1,正交時爲0,相反時爲−1”的性質。當一對文本的長度差距很大、但內容相近時,如果使用詞頻或詞向量作爲特徵,它們在特徵空間中的的歐氏距離通常很大;而如果使用餘弦相似度的話,它們之間的夾角可能很小,因而相似度高。

總體來說,歐氏距離體現數值上的絕對差異,而餘弦距離體現方向上的相對差異。例如,統計兩部劇的用戶觀看行爲,用戶A的觀看向量爲(0,1),用戶B爲(1,0);此時二者的餘弦距離很大,而歐氏距離很小;我們分析兩個用戶對於不同視頻的偏好,更關注相對差異,顯然應當使用餘弦距離。而當我們分析用戶活躍度,以登陸次數(單位:次)和平均觀看時長(單位:分鐘)作爲特徵時,餘弦距離會認爲(1,10)、(10,100)兩個用戶距離很近;但顯然這兩個用戶活躍度是有着極大差異的,此時我們更關注數值絕對差異,應當使用歐氏距離。

分類損失函數

損失函數可以讓我們對模型進行評估,並且爲模型參數的優化提供了方向,但沒有任何一種損失函數適用於所有的模型。損失函數的選取依賴於參數的數量、異常值、機器學習算法、梯度下降的效率、導數求取的難易和預測的置信度等若干方面。

1、0-1損失:預測值和目標值不相等爲1,否則爲0:

缺點:定義過於嚴格,如果真實值爲1,預測值爲0.999,預測應該正確,但是上式會判定爲預測錯誤,可以對其改進爲感知損失;由於其非凸、非光滑的特點,算法很難直接對該函數進行優化。可以使用其代理損失函數是合頁損失或交叉熵損失。

2、感知損失:引入超參數閾值t,感知機中取t=0.5。

3、合頁損失(Hinge Loss)

合頁損失在SVM中解決幾何間隔最大化問題,它是0-1損失函數相對緊的凸上界,且當≥1時,該函數不對其做任何
懲罰。Hinge損失在=1處不可導,因此不能用梯度下降法進行優化,而是用次梯度下降法:


4、指數損失

AdaBoost使用指數損失做爲損失函數:

5、對數似然損失

對數似然損失是對預測概率的似然估計,其最小化的本質是利用樣本中的已知分佈,求解導致這種分佈的最佳模型參數,使這種分佈出現概率最大。它衡量的是預測概率分佈和真實概率分佈的差異性,取值越小越好。其標準形式爲:

對數似然損失函數在二分類時可以化簡爲交叉熵損失函數。交叉熵表示兩個概率分佈之間的距離,交叉熵越大,兩個概率分佈距離越遠,概率分佈越相異;交叉熵越小,兩個概率分佈距離越近,概率分佈越相似,通過交叉熵可以判斷哪個預測結果與標準答案更接近。

交叉熵損失函數的計算公式爲:

對數損失在多分類問題中的計算公式爲:

 

                   

迴歸指標

平均絕對誤差

平均絕對誤差(Mean Absolute Error,  MAE),L1範數損失。MAE是目標值與預測值之差絕對值的和再取平均,因爲預測誤差有正有負,絕對值可以避免正負抵消,不需要考慮誤差的方向。其中,N爲樣本數,爲第i條樣本的真實值,爲第i條樣本的預測值。

均方根誤差

均方誤差(Mean Squared Error,  MSE),L2範數損失。MSE是目標值與預測值之差平方和再取平均,能夠很好地反映迴歸模型預測值與真實值的偏離程度。

均方根誤差
均方根誤差(Root Mean Squared Error,  RMSE)是對MSE進行了開根號處理,使loss與標籤值在量級上統一。

MAE與MSE不同點:

  1. 模型評估時,MAE對離羣點有更好的魯棒性;MSE對離羣點敏感,即使少量離羣點,也會讓MSE指標變得很差,健壯性不如MAE
  2. 模型使用MAE作爲損失函數相當於對數據分佈的中值進行擬合;使用MSE相當於對數據分佈的均值進行擬合,它對大誤差樣本有更大的懲罰;
  3. MSE在極值點有着良好的特性,它的梯度隨着損失函數的減小而減小,即使在固定學習率下也能收斂,而且可以得到更精確的結果。但MAE的梯度在極值點處不可導,有一個很大的躍變,即使很小的損失值也會產生很大的誤差,不利於模型參數的學習。爲了解決這個問題,需要在解決極值點的過程中動態減小學習率,但這會降低模型的收斂速度。

使用MAE作爲loss需要動態調整學習率:\operatorname{lr}=\frac{0.05}{\sqrt{\operatorname{epch}+1}}

加權平均絕對誤差

加權平均絕對誤差(Weighted Mean Absolute Error,  WMAE)是基於MAE的變種評估指標,對每條樣本考慮不同的權重,比如考慮時間因素,離當前時間越久的樣本權重越低。是第i條樣本的權重:

平均絕對百分比誤差
平均絕對百分比誤差(Mean  Absolute Percent Error,MAPE)把每個點的誤差進行了歸一化,通過計算絕對誤差百分比來表示預測效果,降低了個別離羣點帶來的絕對誤差的影響。計算與量綱無關,在特定場景下不同問題具有一定可比性,如MAPE = 10,這表示預測平均偏離真實值10%。它定義爲:

 MAPE的缺點:在真實值0處無定義,如果真實值接近0可能導致MAPE大於100%。而且,MAPE對負值誤差的懲罰大於正值誤差。基於這些缺點從也有一些改進的一評價指標,如MASE,sMAPE、MDA。

均方根對數誤差

均方根對數誤差(Root Mean Squared Logarithmic Error,  RMSLE )對預測值偏小樣本的懲罰比對預測值偏大樣本的懲罰大,如二手手機真實售價是2000元,預測成1800元的懲罰會比預測成2200元的大。如果損失函數選用RMSLE,沒辦法直接優化RMSLE,通常會先對預測目標進行對數變換,使用RMSE作爲損失函數,最後預測值再還原,其公式爲:

Huber損失——平滑平均絕對誤差

L1損失對於異常值更魯棒,但它的導數不連續,在尋找最優解時收斂較慢;L2損失對於異常值敏感,但在優化過程中更爲穩定和準確。Huber Loss 結合MAE和MSE的優點,使用超參數δ來調節誤差的閾值,當預測誤差大於閾值時採用線性誤差,預測誤差小於閾值時採用平方誤差,對異常值不敏感且在極值點處連續且可導,是一種魯棒的迴歸損失函數。其表達式是一個連續可微的分段函數:

 對數雙曲餘弦Log-Cosh損失函數 

對數雙曲餘弦損失是一種比L2更爲平滑的損失函數,它的優點在於對於小的誤差log(cosh(x))與(x**2/2很相近,對於大的誤差與abs(x)-log2很相近,在擁有MSE優點的同時也不會受到異常值的太多影響。它擁有Huber的所有優點,並且在每一個點都是二次可導的。

R方損失(R Squared):

分子是模型預測產生的錯誤,分母是使用預測值爲y的均值產生的錯誤,R2越大犯錯誤越小。

  1. 當模型不犯任何錯誤時: = 1
  2. 當模型等於基準模型時:= 0
  3. 當模型還不如基準模型時: < 0

分位數損失(Quantile Loss):預測取值區間而不是一個具體的取值點時可以用分位數損失。

Huber和Log-cosh損失函數的Python代碼:

# huber loss
def huber(true, pred, delta):
    loss = np.where(np.abs(true-pred) < delta , 0.5*((true-pred)**2), delta*np.abs(true - pred) - 0.5*(delta**2))
    return np.sum(loss)

# log cosh loss
def logcosh(true, pred):
    loss = np.log(np.cosh(pred - true))
    return np.sum(loss)

參考:

https://blog.csdn.net/google19890102/article/details/50522945

https://www.cnblogs.com/massquantity/p/8964029.html

https://redstonewill.com/1584/

更全的迴歸指標分析:https://www.jianshu.com/p/9846a55aeef9

https://www.cnblogs.com/massquantity/p/8964029.html

https://blog.csdn.net/qq_14845119/article/details/80787753

本文中所有的代碼和圖片都可以在這個地方找到!

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