分類模型的F1-score、Precision和Recall 計算過程

分類模型的F1分值、Precision和Recall 計算過程

引入

一般,咱們在評價classifier的性能時使用的是accuracypython

考慮在多類分類的背景下iphone

accuracy = (分類正確的樣本個數) / (分類的全部樣本個數)性能

這樣作其實看上去也挺不錯的,不過可能會出現一個很嚴重的問題:例如某一個不透明的袋子裏面裝了1000臺手機,其中有600臺iphone6, 300臺galaxy s6, 50臺華爲mate7,50臺mx4(固然,這些信息分類器是不知道的。。。)。若是分類器只是簡單的把全部的手機都預測爲iphone6, 那麼經過上面的公式計算的準確率accuracy爲0.6,看起來還不錯;但是三星,華爲和小米的所有預測錯了。若是再給一個袋子,裏面裝着600臺galaxy s6, 300臺mx4, 50臺華爲mate7,50臺iphone,那這個分類器立馬就爆炸了,連回家帶孩子的要求都達不到.net

因此,僅僅用accuracy來衡量一個分類器的性能是很不科學的。所以要引入其餘的衡量標準。3d

二分類

是否是常常看見以下相似的圖?這是二分類的圖,假設只有正類和負類,True和False分別表示對和錯;Positive和Negative分別表示預測爲正類和負類。code

那麼blog

  • TP:預測爲Positive而且對了(樣本爲正類且預測爲正類)
  • TN:預測爲Negative而且對了(樣本爲負類且預測爲負類)
  • FP:預測爲Positive但錯了(樣本爲負類但預測爲正類)
  • FN:預測爲Negative但錯了(樣本爲正類但預測爲負類)
  • TP+FP:預測爲Positive而且對了+預測爲Positive但錯了=預測爲Positive的樣本總數
  • TP+FN:預測爲Positive而且對了+預測爲Negative但錯了=實際爲Positive的樣本總數

因此precision就表示:被正確預測的Positive樣本 / 被預測爲Positive的樣本總數接口

同理,recall就表示:被正確預測的Positive樣本 / 實際爲Positive的樣本總數ip

F1是調和平均值,精準率和召回率只要有一個比較小的話,F1的值也會被拉下來:ci

多分類狀況

其實和二分類狀況很相似,例子以下 這個是Micro , 和二分類相似 (將例子中的precision和recall代入到F1公式中,獲得的就是Micro下的F1值)

而Macro狀況下計算F1須要先計算出每一個類別的F1值,而後求平均值。以下

Macro狀況下上述例子的計算

sklearn計算程序(macro)

下面是使用sklearn直接計算多類別F1/P/R的程序,將接口中的average參數配置爲’macro’便可。

from sklearn.metrics import f1_score, precision_score, recall_score

y_true=[1,2,3]
y_pred=[1,1,3]

f1 = f1_score( y_true, y_pred, average='macro' )
p = precision_score(y_true, y_pred, average='macro')
r = recall_score(y_true, y_pred, average='macro')

print(f1, p, r)
# output: 0.555555555556 0.5 0.666666666667

參考連接:

https://blog.csdn.net/ybdesire/article/details/96507733

https://www.jianshu.com/p/14b26f59040b

相關文章
相關標籤/搜索