多分類的評價指標PRF(Macro-F1/MicroF1/weighted)詳解


也許是由於上學的時候一直搞序列標注任務,多分類任務又可以簡化為簡單的二分類任務,所以一直認為PRF值很簡單,沒啥好看的。然鵝,細看下來竟有點晦澀難懂,馬篇博留個念咯~

前言

PRF值分別表示准確率(Precision)、召回率(Recall)和F1值(F1-score),有機器學習基礎的小伙伴應該比較熟悉。

根據標題,先區別一下“多分類”與“多標簽”:

多分類:表示分類任務中有多個類別,但是對於每個樣本有且僅有一個標簽,例如一張動物圖片,它只可能是貓,狗,虎等中的一種標簽(二分類特指分類任務中只有兩個類別)

多標簽:一個樣本可以有多個標簽。例如文本分類中,一個文本可以是宗教相關,也可以是新聞相關,所以它就可以有兩個標簽

想要詳細了解可以參考博客 https://blog.csdn.net/lyy14011305/article/details/88664518

 

此處只介紹多分類任務的價指標~

 

混淆矩陣與PRF值

1. 混淆矩陣

混淆矩陣是數據科學和機器學習中經常使用的用來總結分類模型預測結果的表,用n行n列的矩陣來表示,將數據集中的記錄按照真實的類別和預測的類別兩個標准進行匯總。以二分類任務為例,混淆矩陣的結構如下:

混淆矩陣 預測
真(正) 假(負)
實際 真(正) TP FN
假(負) FP TN

其中:

TP——將正類預測為正類的個數

FN——將正類預測為負類的個數

FP——將負類預測為正類的個數

TN——將負類預測為負類的個數

2. 傳統的PRF值公式

P = (預測為真且正確預測的樣本數)/(所有預測為真的樣本數)= TP/(TP+FP)

R = (預測為真且正確預測的樣本數)/(實際情況中為真的樣本數)= TP/(TP+FN)

F = 2*P*R/(P+R)

傳統的PRF公式僅適用於二分類任務

3. PRF值-微平均(Micro Average)

 "Micro"是通過先計算總體的TP, FP和FN的數量,然后計算PRF。即先將多個混淆矩陣的TP,FP,TN,FN對應的位置求平均,然后按照PRF值公式及逆行計算。公式如下:

下面通過一個簡單的例子來理解,假設是三個類別的分類模型:

y_true=[1,2,3]

y_pred=[1,1,3]

(1)如下,將第一個類別設置為True(1),非第一個類別設置為False(0),

y_true=[1,0,0]
y_pred=[1,1,0]

由此我們統計得到第一個類別的混淆矩陣:

第一類 預測
真(正) 假(負)
實際 真(正) 1(TP) 0(FN)
假(負) 1(FP) 1(TN)

(2)如下,將第二個類別設置為True(1),非第二個類別設置為False(0),

y_true=[0,1,0]
y_pred=[0,0,0]

由此我們統計得到第二個類別的混淆矩陣:

第二類 預測
真(正) 假(負)
實際 真(正) 0(TP) 1(FN)
假(負) 0(FP) 2(TN)


(3)如下,將第三個類別設置為True(1),非第三個類別設置為False(0),

y_true=[0,0,1]
y_pred=[0,0,1]

由此我們統計得到第三個類別的混淆矩陣:

 

第三類 預測
真(正) 假(負)
實際 真(正) 1(TP) 0(FN)
假(負) 0(FP) 2(TN)

 

(4)根據微平均算法公式我們得到最終的混淆矩陣,如下:

 

最終 預測
真(正) 假(負)
實際 真(正) 2/3(TP) 1/3(FN)
假(負) 1/3(FP) 5/3(TN

帶入微平均公式得:

micro-P = TP/(TP+FP) = (2/3)/(2/3 + 1/3)= 2/3

micro-R = TP/(TP+FN) = (2/3)/(2/3 + 1/3)= 2/3

micro-F1 = 2*P*R/(P+R) = 2/3

 4. PRF值-宏平均(Macro Average)

 “Macro”是分別計算每個類別的PRF,然后分別求平均得到PRF。即對多個混淆矩陣求PRF,然后求PRF的算術平均。公式如下:

同樣借助上面例子,假設是三個類別的分類模型:(若除法過程中,分子分母同時為0,則結果也為0)

y_true=[1,2,3]

y_pred=[1,1,3]

 

(1)如下,將第一個類別設置為True(1),非第一個類別設置為False(0),

y_true=[1,0,0]
y_pred=[1,1,0]

由此我們統計得到第一個類別的混淆矩陣:

第一類 預測
真(正) 假(負)
實際 真(正) 1(TP) 0(FN)
假(負) 1(FP) 1(TN)

我們可以計算第一個類別的PRF值如下:

  • P1 = TP/(TP+FP) = 1/(1+1) = 1/2
  • R1 = TP/(TP+FN) = 1/1 = 1
  • F1_1 = 2*P1*R1/(P1+R1) = 2/3

(2)如下,將第二個類別設置為True(1),非第二個類別設置為False(0),

y_true=[0,1,0]
y_pred=[0,0,0]

由此我們統計得到第二個類別的混淆矩陣:

 

第二類 預測
真(正) 假(負)
實際 真(正) 0(TP) 1(FN)
假(負) 0(FP) 2(TN)

我們可以計算第二個類別的PRF值如下:

  • P2 = TP/(TP+FP) = 0
  • R2 = TP/(TP+FN) = 0
  • F1_2 = 2*P2*R2/(P2+R2) = 0

(3)如下,將第三個類別設置為True(1),非第三個類別設置為False(0),

y_true=[0,0,1]
y_pred=[0,0,1]

由此我們統計得到第三個類別的混淆矩陣:

 

第三類 預測
真(正) 假(負)
實際 真(正) 1(TP) 0(FN)
假(負) 0(FP) 2(TN)

我們可以計算第三個類別的PRF值如下:

  • P3 = TP/(TP+FP) = 1/1 = 1
  • R3 = TP/(TP+FN) = 1/1 = 1
  • F1_3 = 2*P3*R3/(P3+R3) = 1

 (4)對P1, P2, P3取平均得到P, 對R1, R2, R3取平均得到R, 對F1_1, F1_2, F1_3求平均得到F1:

  • P = (P1+P2+P3)/3 = (1/2 + 0 + 1/3 = 1/2
  • R = (R1+R2+R3)/3=(1 +0 +1)/3 = 2/3
  • F1 = 2*P*R/(P+R) = 4/7

4. PRF值-權重(Weighted)

weighted計算方法就是對於macro中的每一類的PRF給予不同的權重

 

本文介紹了PRF值的計算方法的公式及計算方法,希望可以幫到你~

 

下一篇繼續更利用python實現PRF的方法~歡迎關注

 

參考博客:

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

https://blog.csdn.net/lyb3b3b/article/details/84819931

http://www.sohu.com/a/135668355_556897

https://blog.csdn.net/qq_36426650/article/details/88073089

https://zhuanlan.zhihu.com/p/59862986

https://www.zhihu.com/question/36883196?from=profile_question_card

https://www.jianshu.com/p/100f3dee345d

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM