因為一直忘記Precision以及Recall兩個參數的定義以及應用,筆記一下。
如圖所示,大的圈圈代表著判斷的結果。Positives表示判定為是,Negatives表示否;True表示結果為真,False表示結果為否。
此處用(n:m)表示結果,n表示判定結果,m表示真實結果。
TP(True Positives)表示判斷為是,結果為真(1:1);FP表示判斷為是,結果為否(1:0);FN表示判斷為否,結果為真(0:1);TN表示判斷為否,結果為否(0:0)。
目標情況是希望TP與TN最大化,FP以及FN最小化,也就是False越少越好。
因此定義準確度(Accuracy)為
$$Accuracy=\frac{TP+TN}{TP+TN+FP+FN}=\frac{T}{T+F}$$
也就是所有結果中,判斷正確的結果比例。
在一些Learning的使用情況下,不一定追求Accuracy的正確性而已,有的時候也會注重其他兩個參數:適合度(Precision)以及再現度(Recall),定義為
$$Precision=\frac{TP}{TP+FP}$$
$$Recall=\frac{TP}{TP+FN}$$
Precision的意義為:判斷為正的結果中,正確率為多少?
也就是在一群蘋果中,挑選出爛掉的蘋果,真的爛掉的蘋果有多少?挑選出的爛蘋果中,好蘋果越少,Precision越高。
Recall的意義則為:應當判斷為正的結果中,有多少判斷為正?
也就是在一群蘋果中,在挑選出的爛蘋果外,還有多少爛蘋果沒被找到?越少沒被找到的爛蘋果,Recall就越高。
假設這一箱蘋果是要給小朋友吃的水果,爛掉的蘋果非常危險,絕對不能讓小朋友吃到,這時Recall就非常重要。提升Recall的意義就是「寧可錯殺100也不放過一個」。
然而對於蘋果果農而言,果農不希望好的蘋果都被挑掉,越多蘋果出貨,錢就越多。此時Precision就非常重要,選錯了太多好的蘋果當作爛掉的蘋果賣,是會虧錢的。
Precision以及Recall並非相輔相成,這時也有函數能代表著綜合標準(利用Harmonic Mean, 調和平均數來代表),也就是F1 score。
$$F=2*\frac{precision\times recall}{precision+recall}$$
雖然F1 score不見得能作為最終的判斷標準,但作為一個指標也夠了。
sklearn中調用參數
在python中,學術module - sklearn已經有寫好可以作為分數指標的函式。
|
|
在tensorflow中也有類似用法。本文使用Tensorflow 2.0作為範例,在1.14下無法運作。
|
|