Time: 2019.09.14git
本文首發於 www.f1renze.me/ 轉載請註明出處!github
如無特殊說明,文中提到的分類皆指二分類任務markdown
在瞭解 ROC 以前,先得了解什麼是 Confusion Matrix (It really confused me when I see it first time. XD)。實際上混淆矩陣可以幫助咱們瞭解分類任務模型的偏好性,如正判(True)較多或誤判(False)較多,或是更多預測爲 Positive / Negative (取決於 threshold 取值)。機器學習
更專業地說它被用於機器學習分類任務的性能度量,即衡量模型泛化能力的評價標準。oop
Confusion Matrix 由 4 個術語組成,咱們如今把分類問題假設爲醫生診斷病人是否患流感:性能
True Positive (TP)學習
若病人實際上患了流感且醫生確診爲流感,稱爲 TP。測試
True Negative (TN)spa
若病人未患流感且醫生診斷該病人未患流感,稱爲 TN。code
False Positive (FP)
若病人未患流感但被誤診爲已患流感,稱爲 FP,又稱 「Type I error」。
False Negative (FN)
若病人患流感但被誤診爲未患流感,稱爲 FN,又稱 「Type II error」。
因此實際上 Confusion Matrix 並不難理解,T / F 表示模型預測值與實際值是否符合,P / N 表示模型預測的類別。
Accuracy ,精度,最經常使用的指標。
表示分類預測正確的樣本數佔整體樣本的比例。
(TP + TN) / (TP + FP + TN + FN)
Recall,又稱查全率。
表示全部實際爲 Positive 類別的樣本中被預測準確的機率。
Recall = TP / (TP + FN)
Precision,又稱查準率。
表示全部被預測爲 Positive 的樣本中預測準確的機率。
Precision = TP / (TP + FP)
通常來講 Precision 高時 Recall 會偏低,反之 Recall 高時 Precision 偏低,因此須要引入 F-Score 來比較不一樣模型的性能。
F-Score,又稱 F1-score。
爲 Precision 和 Recall 的調和平均值,值越接近 1 越好,反之越接近 0 越差。
F-Score = 2*(Recall * Precision) / (Recall + Precision)
回到上文中診斷流感的例子來講明這幾個指標。
若 Accuracy 爲 90%,表示用此模型預測時,每10個樣本里有9個預測正確,1個預測錯誤。
若 Precision 爲 80%,表示用此模型預測時,每10個被判斷爲患流感的例子中就有2例誤診。
若 Recall 爲 70%,表示用此模型預測時,每10個實際患流感的病人中就有3個病人會被告知沒有患流感。
因此在這個應用場景中咱們更看重的是 Recall,而 F-Score 的通常形式 Fβ 能表示模型對於 Precision / Recall 的不一樣偏好。
β = 1 時爲標準的 F1;β > 1 時 Recall 有更大影響,0 < β < 1 時 Precision 有更大影響。
因爲分類器分類過程其實是爲樣本計算出預測機率,根據機率與事先定義的 threshold (一般爲 0.5)進行比較,若大於 threshold 爲正例(Positive),反之爲反例(Negative)。若根據預測機率對測試集樣本進行排序,預測機率值最大的樣本即爲最可能爲正例的樣本,預測機率值最小的樣本即爲最可能爲反例的樣本。
在不一樣的應用場景下采起不一樣的 threshold 能獲得更符合預期的結果,以上文中診斷流感的場景來看,因爲咱們更重視 Recall,故採起較低的 threshold 會下降患流感病人被認爲健康的機率(而後致使更多的誤診,逃);但若在商品推薦系統中,爲了儘量少打擾用戶,更但願推薦的商品是用戶更感興趣的,此時咱們更看重 Precision,故調高 threshold 更符合指望。
所以排序質量決定了分類器在不一樣任務下的指望泛化性能的好壞,而 ROC 曲線可以很好地表示整體狀況下分類器的泛化性能。典型的 ROC 曲線以 False Positive Rate 爲 x 軸,True Positive Rate 爲 y 軸,定義以下:
TPR = TP / (TP + FN)
FPR = FP / (TN + FP)
ROC 曲線繪製原理 根據 n 個測試樣本計算出的預測機率排序,輪詢將每一個預測值設置爲 threshold 並計算此時的 TPR & FPR 爲 (x, y) 座標,擬合 n 個座標點造成的曲線即爲 ROC 曲線。
AUC 的全稱是 Area Under Curve,顧名思義其爲 ROC 曲線下的面積,不一樣的 AUC 值表示模型區分不一樣樣本的能力。
理想狀況下,模型將樣本徹底區分爲2類,此時 ROC 曲線以下所示,AUC = 1。
大多數時候 ROC 曲線是下圖這樣的,曲線總體接近左上方;AUC = 0.7 表示 70% 的樣本會被正確分類,於此同時也有 FN 和 FP 的樣本。
ROC 曲線處於對角線時 AUC = 0.5,表示模型極可能有問題,由於其區分類型的能力與隨機無異。
AUC 低於 0.5 甚至接近 0 時,未必是一件壞事,說明模型將樣本類型區分反了,若此時將 1 - 機率的值置爲新的機率,AUC就接近 1 了!(別問我爲啥知道)
代碼地址:gist.github.com/F1renze/6ae…
以下圖所示: