性能評估是用什么樣的方法來評估一個模型的預測質量。來對模型的性能進行評價。
回歸問題的評估方法
能夠想到的評估方法是均方誤差(mean square error),均方誤差又叫做平均損失:
學習器f,在數據集 $D=\{(\mathbf{x}_1,y_1),(\mathbf{x}_2,y_2),…,(\mathbf{x}_m,y_m)\}$上面的均方誤差為 $$E(f;D)= \frac{1}{m} \sum_{i=1}^{m}{(\textbf{x}_i –y_i)}^2$$
分類問題的評估方法
很容易想到的是准確率(accuracy)來進行評估 $准確率=\frac{分類正確的樣本數}{總的樣本數}$,這個評估方法簡單明了,但是只用這一個方法來進行評估有點太單調。尤其是在類別不平衡的數據集的情況下,准確率往往不能反映出一個分類器的好壞。不同的任務需要的評價方法不一樣,在一個推薦系統當中,為了盡量打擾用戶,我們更關心我們預測出來的興趣當中真正被用戶喜歡的概率。在預測罪犯的任務當中,我們更關心的是所有犯罪的人當中全部被我們預測出來的概率,這就是兩種不同的評估方法,前者叫做precision(查准率),后者叫做recall(查全率、召回率)。
precision和recall
為了表述分類任務的預測情況,我們需要使用下面的表:
預測為正 | 預測為反 | |
真正為正 | TP(真正例) | FN(假反例) |
真正為反 | FP(假正例) | TN(真反例) |
上面的表叫做混淆矩陣,矩陣里面的值的正例和反例是根據預測結果來決定的,預測為正(Positive),那么結果就是正例,和真實結果相符為真正例(TP),和真實結果相反的為假正例(FP)。 同理預測為反(Negative),有假反例(FN)和真反例(TN)。
在混淆矩陣的基礎上我們定義下面兩個概念
precision 預測為正的樣本當中有多少預測准確了$P = \frac{TP}{TP+FP}$
recall 真正為正的樣本當中有多少被預測出來了 $R = \frac{TP}{TP+FN}$
P-R曲線的繪制
查准率和查全率是什么關系哪? 假如我們想要提高查全率,那么我們把所有的樣本都預測為正,這個時候我們的准確率勢必會下降。很多模型在樣本預測的時候並不是單純的得出一個正、負這樣的分類值,而是得到一個介於0和1之間的概率值,表示預測為正的概率為多大,然后通過這個數和一個閾值比較(通常為0.5),比這個閾值大的預測為正例,比這個閾值小的預測為反例。
當我們調整這個閾值的時候,我們預測的結果就會改變,所以,繪制P-R曲線的時候是以這個閾值為自變量,閾值改變的時候,查准率和查全率就會改變,將不同的閾值對應的precision和recall的值繪制到圖形上面就形成了P-R曲線圖。
剛開始,閾值很高,這樣預測出來的樣本當中正例樣本很少,但是能保證這些預測為正的樣本的確是真正的樣本,也就是P值很高。隨着閾值的下降,到了極限閾值為0的時候,所有樣本都預測為正樣本,此時R值最大,即所有為正的樣本都被預測出來了。
繪制出來的P-R曲線的一般是這樣的:
關於P-R圖形有這么一個直觀的認識:若一個模型的曲線把另外一個模型的曲線包住,那么這個模型的性能要由於另外一個模型。
提高分類閾值,則假證例的個數會顯著減少,真正例的個數會減少或者不變,所以,此時precision會增加,recall會減少。
$F1$值和$F_{\beta}$值
單獨使用precision和recall的話,那么容易出現一個問題,那就是在有的時候precision和recall這兩個值都很高。這個時候可以使用其它的標准,比如上圖當中的平衡點,即曲線和y=x曲線的交點。
還可以使用F1值來進行度量:$F1 = \frac{2\times P \times R}{P+R}$
$F_{\beta}$可以選擇我們對於precison的值和recall值的權重$$F_{\beta}=\frac{1+{\beta}^2 \times P \times R}{({\beta}^2\times P)+R}$$
當$\beta$的值為1的時候,為$F_{\beta}$變為了$F1$。表示precision和recall的權重是一樣的。 當$\beta$的值大於1的時候,recall有更大的影響,$\beta$小於1的時候,precision的值有更大的影響。
ROC和AUC
在混淆矩陣當中還可以定義出來兩個變量:
TPR(True Positive Rate)真正例率 模型正確預測的正樣本率 $TPR=\frac{TP}{TP+FN}$ 其實和recall是一樣的
FPR (False Positive Rate)假正例率 模型錯誤預測的負樣本率 $FPR =\frac{FP}{FP+TN}$
我們以這兩個指標來繪制ROC曲線,ROC(Receiver Operating Characteristic) 受試者工作特征曲線。同樣,我們的自變量應該是我們的閾值,每得到一個閾值,就有一個TPR和一個FPR與之對應。 當閾值很高的時候,大部分都預測為反例,此時,TPR和FPR都很低。當閾值很高的時候,大部分都預測為正例,此時TPR和FPR都很高。ROC曲線繪制出來的效果如下。
可以看出ROC曲線和P-R曲線 都是以閾值為自變量,使用不同的指標來繪制出來圖形。
對於ROC曲線來說,下面的面積是AUC(Area Under Roc Curve),面積越大,模型的性能越好。
為什么要用ROC和AUC哪? 根據這個博客,可以看到當測試集中的正負樣本的分布變化的時候,ROC曲線能夠保持不變。
總結一下: 回歸問題的性能度量可以使用均方誤差,分類問題的性能度量可以使用 accuracy、precision、recall、F1值、$F\beta$值、ROC和AUC。在下一篇模型的性能評估(二) 用sklearn進行模型評估我將介紹如何在sklearn當中對這些方法進行使用。
參考 周志華 《機器學習》 2.3 性能度量