機器學習模型評價指標整理

最近對這幾個指標又有些生疏,整理個筆記方便查看:

分類/迴歸問題評估指標:

分類問題 迴歸問題
準確率 – Accuracy MSE(均方誤差)
精確率(查準率)- Precision MAE (平均絕對誤差)
召回率(查全率)- Recall 均方根誤差(RMSE)
F1分數 R方 (R Squared)
ROC曲線 ——
AUC曲線 ——

混淆矩陣:

標籤值:1 標籤值:0
預測值:1 TPTP FPFP
預測值:0 FNFN TNTN
  • TT 表示分類的結果正確
  • FF 表示分類的結果錯誤
  • PP 表示判爲正例
  • NN 表示判爲負例

具體例子:

  • TP – True Positive:實際爲1,且判斷爲1(正確)
  • FN – False Negative:實際爲1,但判斷爲0(錯誤)
  • TN – True Negative:實際爲0,且判斷爲0(正確)
  • FP – False Positive:實際爲0,但判斷爲1(錯誤)
    主對角線上爲TP,TNTP,TN表示分類正確,
    副對角線上爲FP,FNFP,FN表示分類錯誤。

分類評估指標詳解
下面詳細介紹一下分類分爲種的各種評估指標詳情和計算公式:

1. 準確率 – Accuracy

預測正確的結果佔總樣本的百分比,公式如下:
準確率 =(TP+TN)/(TP+TN+FP+FN)(TP+TN)/(TP+TN+FP+FN)

注: 雖然準確率可以判斷總的正確率,但是在樣本不平衡 的情況下,並不能作爲很好的指標來衡量結果。舉個簡單的例子,比如在一個總樣本中,正樣本佔 90%,負樣本佔 10%,樣本是嚴重不平衡的。對於這種情況,我們只需要將全部樣本預測爲正樣本即可得到 90% 的高準確率,但實際上我們並沒有很用心的分類,只是隨便無腦一分而已。這就說明了:由於樣本不平衡的問題,導致了得到的高準確率結果含有很大的水分。即如果樣本不平衡,準確率就會失效。

2. 精確率(查準率)- Precision

所有被預測爲正的樣本中實際爲正的樣本的概率,公式如下:
精準率 =TP/(TP+FP)TP/(TP+FP)

精準率和準確率看上去有些類似,但是完全不同的兩個概念。精準率代表對正樣本結果中的預測準確程度,而準確率則代表整體的預測準確程度,既包括正樣本,也包括負樣本。

3. 召回率(查全率)- Recall

實際爲正的樣本中被預測爲正樣本的概率,其公式如下:
召回率=TP/(TP+FN)
召回率的應用場景:
以網貸違約率爲例,相對好用戶,我們更關心壞用戶,不能錯放過任何一個壞用戶。因爲如果我們過多的將壞用戶當成好用戶,這樣後續可能發生的違約金額會遠超過好用戶償還的借貸利息金額,造成嚴重償失。召回率越高,代表實際壞用戶被預測出來的概率越高,它的含義類似:寧可錯殺一千,絕不放過一個。
如果我們把**精確率(Precision)召回率(Recall)**之間的關係用圖來表達,就是下面的P-R曲線:
在這裏插入圖片描述
縮寫PRP-R曲線,縱軸在左邊是查準率PP,很方便記憶。這兩個指標實際上難以兩全。爲了綜合兩者的表現,在兩者之間找一個平衡點,就出現了一個 F1分數。
F1=(2×Precision×Recall)/Precision+RecallF1=(2×Precision×Recall)/(Precision+Recall)

ROC曲線、AUC曲線

1.靈敏度/特異度介紹
在介紹 ROC/AUC 之前,要再介紹兩個指標,這兩個指標的選擇也正是 ROC 和 AUC 可以無視樣本不平衡的原因。 這兩個指標分別是:靈敏度和特異度,也叫做真正率(TPR)和假正率(FPR)。

  • 靈敏度(Sensitivity) = TP/(TP+FN)TP/(TP+FN)
  • 特異度(Specificity) = TN/(FP+TN)TN/(FP+TN)

其實靈敏度和召回率是一樣的,只是名字換了而已。
由於我們比較關心正樣本,所以需要查看有多少負樣本被錯誤地預測爲正樣本,使用1減去特異度,而非特異度。

  • 真正率(TPR) = 靈敏度 = TP/(TP+FN)TP/(TP+FN)
  • 假正率(FPR) = 1 - 特異度 = 1TN/(FP+TN)1- TN/(FP+TN) = FP/(FP+TN)FP/(FP+TN)

TPR 和 FPR 分別是基於實際表現 1 和 0 出發的,也就是說它們分別在實際的正樣本和負樣本中來觀察相關概率問題。 正因爲如此,所以無論樣本是否平衡,都不會被影響。還是拿之前的例子,總樣本中,90% 是正樣本,10% 是負樣本。我們知道用準確率是有水分的,但是用 TPR 和 FPR 不一樣。這裏,TPR 只關注 90% 正樣本中有多少是被真正覆蓋的,而與那 10% 毫無關係,同理,FPR 只關注 10% 負樣本中有多少是被錯誤覆蓋的,也與那 90% 毫無關係,所以可以看出:**如果我們從實際表現的各個結果角度出發,就可以避免樣本不平衡的問題了,這也是爲什麼選用 TPR 和 FPR 作爲 ROC/AUC 的指標的原因。**結合混淆矩陣更容易理解。

也可以從另一個角度考慮:條件概率。 我們假設 X 爲預測值,Y 爲真實值。那麼就可以將這些指標按條件概率表示:

  • 精準率 = P(Y=1 | X=1)
  • 召回率 = 靈敏度 = P(X=1 | Y=1)
  • 特異度 = P(X=0 | Y=0)

從上面三個公式看到:如果我們先以實際結果爲條件(召回率,特異度),那麼就只需考慮一種樣本,而先以預測值爲條件(精準率),那麼我們需要同時考慮正樣本和負樣本。所以先以實際結果爲條件的指標都不受樣本不平衡的影響,相反以預測結果爲條件的就會受到影響。

2. ROC(接受者操作特徵曲線)
ROC(Receiver Operating Characteristic)曲線,又稱接受者操作特徵曲線。該曲線最早應用於雷達信號檢測領域,用於區分信號與噪聲。後來人們將其用於評價模型的預測能力,ROC 曲線是基於混淆矩陣得出的。

ROC 曲線中的主要兩個指標就是真正率和假正率,其中橫座標爲假正率(FPR),縱座標爲真正率(TPR),這兩個指標也是ROC 曲線無視樣本不平衡的原因,下面就是一個典型的 ROC 曲線圖,在不同分類閾值下的 TP 率與 FP 率。
不同分類閾值下的 TP 率與 FP 率
如何判斷 ROC 曲線的好壞?
改變閾值只是不斷地改變預測的正負樣本數,即 TPR 和 FPR,但是曲線本身是不會變的。那麼如何判斷一個模型的 ROC 曲線是好的呢?這個還是要回歸到我們的目的:FPR 表示模型虛報的響應程度,而 TPR 表示模型預測響應的覆蓋程度。我們所希望的當然是:虛報的越少越好,覆蓋的越多越好。所以總結一下就是 TPR 越高,同時 FPR 越低(即 ROC 曲線越陡),那麼模型的性能就越好。
3. AUC(曲線下的面積)
爲了計算 ROC 曲線上的點,我們可以使用不同的分類閾值多次評估邏輯迴歸模型,但這樣做效率非常低。幸運的是,有一種基於排序的高效算法可以爲我們提供此類信息,這種算法稱爲曲線下面積(Area Under Curve)。
在這裏插入圖片描述
AUC 的物理意義
曲線下面積對所有可能的分類閾值的效果進行綜合衡量。曲線下面積的一種解讀方式是看作模型將某個隨機正類別樣本排列在某個隨機負類別樣本之上的概率。

比較有意思的是,如果我們連接對角線,它的面積正好是 0.5。對角線的實際含義是:隨機判斷響應與不響應,正負樣本覆蓋率應該都是 50%,表示隨機效果。 ROC 曲線越陡越好,所以理想值就是 1,一個正方形,而最差的隨機判斷都有 0.5(使用瞎猜方式),所以一般 AUC 的值是介於 0.5 到 1 之間的。
AUC 的一般判斷標準:

  • 0.5 - 0.7: 效果較低,但用於預測股票已經很不錯了
  • 0.7 - 0.85: 效果一般
  • 0.85 - 0.95: 效果很好
  • 0.95 - 1: 效果非常好,但一般不太可能
    AUC因以下兩個原因而比較實用:
  • 曲線下面積的尺度不變。它測量預測的排名情況,而不是測量其絕對值。
  • 曲線下面積的分類閾值不變。它測量模型預測的質量,而不考慮所選的分類閾值。
    不過,這兩個原因都有各自的侷限性,這可能會導致曲線下面積在某些用例中不太實用:
  • 並非總是希望尺度不變。 例如,有時我們非常需要被良好校準的概率輸出,而曲線下面積無法告訴我們這一結果。
  • 並非總是希望分類閾值不變。 在假負例與假正例的代價存在較大差異的情況下,儘量減少一種類型的分類錯誤可能至關重要。例如,在進行垃圾郵件檢測時,您可能希望優先考慮儘量減少假正例(即使這會導致假負例大幅增加)。對於此類優化,曲線下面積並非一個實用的指標。
    ROC/AUC 的 Python 實現
    Python 中我們可以調用 sklearn 機器學習庫的 metrics 進行 ROC 和 AUC 的實現,簡單的代碼實現部分如下:
from sklearn import metrics
from sklearn.metrics import auc 
import numpy as np
y = np.array([1, 1, 2, 2])  
scores = np.array([0.1, 0.4, 0.3, 0.8])  
fpr, tpr, thresholds = metrics.roc_curve(y, scores, pos_label=2)
metrics.auc(fpr, tpr) 

參考:
周志華機器學習
谷歌機器學習:機器學習

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