性能度量:爲了瞭解模型的泛化能力,需要一個指標來衡量,這就是它的意義。
主要討論與分類有關的一些指標:
1. 混淆矩陣:
可以這麼理解:s1,先看預測結果(P/N); s2,再根據實際表現對比預測結果,給出判斷結果(T/F)。
TP:預測爲1,預測正確,即實際爲1;
FP:預測爲1,預測錯誤,即實際爲0;
TN:預測爲0,預測正確,即實際爲0;
FN:預測爲0,預測錯誤,即實際爲1.
2. 準確率
指預測正確的結果佔總樣本的百分比。
準確率=(TP+TN)/(TP+TN+FP+FN)
在樣本不平衡的情況下,高準確率就是失效。正因爲如此,衍生出了其他兩種指標:精準率和召回率。
3. 精準率(precision)
又叫查準率,是針對預測結果而言的,它的含義是在所有被預測爲正的樣本中實際樣本爲正樣本的概率,意思就是在預測爲正樣本的結果中,我們有多少把握可以預測正確。
精準率=TP/(TP+FP)
精準率代表對正樣本結果中的預測準確度;而準確率則代表整體預測的準確程度,既包括正樣本,也包括負樣本。
4. 召回率(Recall)
又稱查全率,是針對原樣本而言的,它的含義是在實際爲正的樣本中被預測爲正樣本的概率。
召回率=TP/(TP+FN)
召回率越高,代表壞樣本被預測出來的概率越高,含義可以理解爲:寧可錯殺一千,不可放過一個。
5. 精準率和召回率的關係,F1分數
F1分數同時考慮了查準率和查全率,讓二者同時達到最高,取一個平衡。
F1=2*查準率*查全率/(查準率+查全率)
6. ROC/AUC概念
靈敏度、特異度、真正率、假正率
在正式介紹ROC/AUC之前,還要再介紹兩個指標,這兩個指標的選擇也正是ROC和AUC可以無視樣本不平衡的原因。分別是:靈敏度和(1-特異度),也叫做真正率(TPR)和假正率(FPR)。
靈敏度(Sensitivity)= TP/(TP+FN)
特異度(Specificity)= TN/(FP+TN)
其實我們可以發現,靈敏度和召回率是一模一樣的,只是換了名字而已。
由於我們比較關心正樣本,所以需要查看有多少負樣本被錯誤的預測爲正樣本,所以使用(1-特異度),而不是特異度。
真正率(TPR)= 靈敏度 = TP/(TP+FN)
假正率(FPR)= 1-特異度 = FP/(FP+TN)
下面是真正率和假正率的示意,我們發現TPR和FPR分別是基於實際表現1和0出發的,也就是說它們分別在實際的正樣本和負樣本中來觀察相關概率問題。正因爲如此,所以無論樣本是否平衡,都不會被影響。拿例子來說明,總樣本中,90%是正樣本,10%是負樣本。我們知道用準確率是有水分的,但是用TPR和FPR就不一樣。這裏,TPR只關注90%正樣本中有多少是被真正覆蓋的額,而與那10%毫無關係。同理,FPR只關注負樣本中有多少是被錯誤覆蓋的,也與那90%毫無關係,所以可以看出:如果我們從實際表現的各個角度出發,就可以避免樣本不平衡的問題了,這也是爲什麼選用TPR和FPR作爲ROC/AUC指標的原因。
7. ROC(接受者操作特徵曲線)
ROC(Receiver Operating Characteristic)曲線,又稱接受者操作特徵曲線。該曲線最早應用於雷達信號檢測領域,用於區分信號與噪聲。後來人們將其用於評價模型的預測能力,ROC曲線是基於混淆矩陣得出的。
ROC曲線中的主要兩個指標就是真正率和假正率,其中橫座標爲假正率(FPR),縱座標爲真正率(TPR),下面就是一個標準的ROC曲線圖。
ROC曲線的閾值問題
改變閾值只是不斷地改變預測的正負樣本數,即TPR和FPR,但是曲線本身是不會變的。迴歸到我們的目的:FPR表示模型虛報的響應程度,而TPR表示模型預測響應的覆蓋程度。我們所希望的是:虛報的越少越好,覆蓋的越多越好,所以總結一下就是TPR越高,同時FPR越低(即ROC曲線越陡),那麼模型的性能越好。
8. AUC(曲線下面積)
爲了計算ROC曲線上的點,我們可以使用不同的分類閾值多次評估邏輯迴歸模型,但是這樣做效率非常低。幸運的是,有一種基於排序的高效算法可以爲我們提供此類信息,這種算法成爲曲線下面積(Area Under Curve)。
比較有意思的是,如果我們連接對角線,它的面積正好是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.35,0.8])
fpr,tpr,thresholds = metrics.roc_curve(y,scores,pos_label=2)
metrics.auc(fpr,tpr)
輸出結果爲:0.75 #auc的面積爲0.75