分類任務最常用的性能評估名額:混淆矩陣、準确率、召回率、精确率、F1以及AUC、ROC。
混淆矩陣
在實際問題中,我們往往更關注模型對某一特定類别的預測能力,這時,準确性名額就變得籠統了。比如在診斷惡性良性腫瘤問題上,醫生更關心多少惡性惡性良性腫瘤被正确檢出【召回率Recall】,而求診人也害怕被錯誤檢出,遭受精神折磨【精确率Precision】;在信用卡欺詐檢測上,銀行更關注多少欺詐使用者被正确檢出【覆寫率Recall】。在二分類任務下,預測結果和正确結果之間存在4種不同組合,構成混淆矩陣。惡性惡性良性腫瘤為陽性(Positive),良性惡性良性腫瘤為陰性(Negative),那麼預測正确的惡性惡性良性腫瘤為真陽性(TP),預測正确的良性惡性良性腫瘤為真陰性(TN),原本是良性誤判為惡性的是假陽性(FP),原本是惡性但誤判為良性的是假陰性(FN)。最不願意看到的就是假陰性,因為這會耽誤治療,會給銀行造成壞賬損失。
評價名額
準确率 A c c u r a c y = # T P + # T N # T P + # T N + # F P + # F N Accuracy=\frac{\#TP+\#TN}{\#TP+\#TN+\#FP+\#FN} Accuracy=#TP+#TN+#FP+#FN#TP+#TN
召回率 R e c a l l = # T P # T P + # F N Recall = \frac{\#TP}{\#TP+\#FN} Recall=#TP+#FN#TP
精确率 P r e c i s i o n = T P T P + F P Precision=\frac{TP}{TP+FP} Precision=TP+FPTP
盡管有精确率和召回率名額,但它們并不能同時達到最優,需要妥協【trade-off】,達成最佳。
妥協方式是根據應用場景而有所側重,通過改變分類器的Threshold來實作最優。在需要高精确率場景【比如側重于患者不恐慌】,提高Threshold來提高準确率,但此時可能錯過有問題的患者,召回率降低;在需要高召回率場景【甯可錯不可放過】,減少Threshold來避免放過,但此時可能誤診,精确率低。
為了綜合考量召回率與精确率,F1名額:
F 1 = 2 1 P r e c i s i o n + 1 R e c a l l F1 = \frac{2}{\frac{1}{Precision}+\frac{1}{Recall}} F1=Precision1+Recall12
ROC和AUC
ROC曲線繪制不同Threshold下的真正例率和假正例率。曲線越接近左上方分類器性能越好。AUC【Area Under Curve】是以數值形式來描述模型的性能,便于比較多個分類器。AUC越大越好。

真正例率(覆寫率) T P R = # T P # T P + # F N TPR=\frac{\#TP}{\#TP+\#FN} TPR=#TP+#FN#TP
假正例率【陰性被誤診為陽性】 F P R = # F P # T N + # F P FPR=\frac{\#FP}{\#TN+\#FP} FPR=#TN+#FP#FP
根據學習器的預測結果對樣例進行排序,按此順序逐個把樣本作為正例進行預測,每次計算出FPR和TPR,分别作為橫縱坐标,得到ROC曲線。利用ROC曲線,我們考量不同分類門檻值下分類器的泛化性能。
一個可視化的基于ROC選取模型的網頁→ROC可視化
由圖可知:
- 降低Threshold,會有更多的正例結果出現,TP與FP都會增加,TN和FN降低,此時假正例率升高,真正例率升高。
- 負例與正例的距離越遠,分類器的效果越好,ROC曲線越接近左上角,AUC越接近1.
參考
《Python機器學習及實踐從零開始通往Kaggle競賽之路》
《機器學習_ 學習筆記 (all in one)_V0.96》