sklearn.metrics.f1_score中micro、macro、samples理解
前言
micro_f1、macro_f1、example_f1等指標在多標籤場景下經常使用,sklearn中也進行了實現,在函式f1_score中通過對average設定"micro"、“macro”、"samples"便可進行上述指標的計算。關於micro_f1、macro_f1網上有很多資料,但example_f1相關資料較少,為此對sklearn.metrics中_classification.py進行了解讀,對上述三種指標的計算過程進行簡單總結。
可以直接看總結部分,如果能理解的話(主要個人表達能力確實比較差)就可以不看具體的計算過程。
設多標籤預測結果為(這裡為三個樣本、六個標籤)
[
[0,1,1,0,0,0],
[1,1,1,0,0,0],
[1,1,0,0,0,1]
]
實際標籤為
[
[1,0,0,0,0,0],
[0,1,1,0,0,0],
[0,0,1,1,0,0]
]
micro(micro_f1)
首先獲取每個標籤的混淆矩陣(混淆矩陣可參照這篇部落格進行學習https://blog.csdn.net/vesper305/article/details/44927047),結果如下(每個二維列表對應一個標籤的混淆矩陣):
[
[[0,2], [1,0]],
[[0,2], [0,1]],
[[0,1], [1,1]],
[[2,0], [1,0]],
[[3,0], [0,0]],
[[2,1], [0,0]]
]
根據混淆矩陣獲取各標籤上true positive的個數:tp_sum = [0,1,1,0,0,0],獲取真實標籤在各標籤上正樣本的個數:true_sum = [1,1,2,1,0,0],獲取預測結果在各標籤上正樣本的個數:pred_sum = [2,3,2,0,0,1]。
對tp_sum、true_sum、pred_sum分別求和獲取tp_sum = [2]、true_sum = [5]、pred_sum = [8],計算precision為0.25,recall為0.4,所以micro_f1 =
2
∗
p
r
e
c
i
s
i
o
n
∗
r
e
c
a
l
l
p
r
e
c
i
s
i
o
n
+
r
e
c
a
l
l
=
0.3077
\frac {2*precision*recall}{precision+recall}=0.3077
precision+recall2∗precision∗recall=0.3077。
macro(macro_f1)
macro與micro前一部分一樣,得到tp_num、true_num、pred_num,然後在每個標籤上計算precision=[0,0.3333,0.5,0,0,0],recall=[0,1,0.5,0,0,0],接著在每個標籤上計算f1_score=[0,0.5,0.5,0,0,0],最後將三者平均得到最終的precision=0.1389,recall=0.25,f1_score=0.1667,此時的f1_score就是macro_f1。
samples(example_f1)
首先獲取每個樣本的混淆矩陣
[
[[3,2], [1,0]],
[[3,1], [0,2]],
[[1,3], [2,0]]
]
根據混淆矩陣獲取各樣本上true positive的個數:tp_sum = [0,2,0],獲取真實標籤在各樣本上為正的個數:true_sum = [1,2,2],獲取預測結果在各樣本上為正的個數:pred_sum = [2,3,3]。
然後在每個樣本上計算precision=[0,0.6667,0],recall=[0,1,0],接著在每個樣本上計算f1_score=[0,0.8,0],最後將三者平均得到最終的precision=0.2222,recall=0.3333,f1_score=0.2667,此時的f1_score就是example_f1。
總結
總體來說micro_f1統計整體的true positive情況,計算整體的precision和recall,然後得到f1_score,此時的f1_score就是micro_f1;macro_f1統計每個標籤的true positive情況,計算每個標籤的的precision和recall,然後得到每個標籤的f1_score,對每個標籤的f1_score進行平均,此時的f1_score就是macro_f1;example_f1統計每個樣本的true positive情況,計算每個樣本的的precision和recall,然後得到每個樣本的f1_score,對每個樣本的f1_score進行平均,此時的f1_score就是example_f1。
相關文章
- Event loop的macro task和micro taskOOPMac
- Macro / Micro / Weighted AUC 如何計算例項講解Mac
- 從面試題看 JS 事件迴圈與 macro micro 任務佇列面試題JS事件Mac佇列
- 從面試題看 JS 事件迴圈與 macro micro 任務佇列(轉載)面試題JS事件Mac佇列
- js事件迴圈與macroµ任務佇列-前端面試進階JS事件Mac佇列前端面試
- Rust中的macro_rulesRustMac
- 多標籤分類的結果評估---macro-average和micro-average介紹Mac
- windows appfabric samplesWindowsAPP
- SciTech-Mathmatics-Probability+Statistics-Population Vs. Sampling: Representative Samples + How to obtain SamplesAI
- TF卡,Micro SD卡,Micro SDHC卡SD卡
- micro/micro:分散式微服務雲作業系統分散式微服務作業系統
- go-micro講解--Go Micro編寫微服務Go微服務
- Micro原始碼系列 - Go-Micro服務是如何註冊的原始碼Go
- 過程宏(proc-macro)Mac
- SharePoint 101 Code Samples are now availableAI
- 微前端 Micro-Frontends - 概念前端
- proc-macro-workshop:builder-1MacUI
- proc-macro-workshop:builder-4MacUI
- proc-macro-workshop:builder-5MacUI
- proc-macro-workshop:builder-6MacUI
- proc-macro-workshop:builder-2MacUI
- proc-macro-workshop:sorted-1Mac
- proc-macro-workshop:sorted-2Mac
- proc-macro-workshop:sorted-3Mac
- proc-macro-workshop:sorted-4Mac
- proc-macro-workshop:sorted-5Mac
- proc-macro-workshop:sorted-6Mac
- proc-macro-workshop:sorted-7Mac
- proc-macro-workshop:sorted-8Mac
- proc-macro-workshop:bitfield-0Mac
- proc-macro-workshop:seq-1Mac
- proc-macro-workshop:seq-2Mac
- proc-macro-workshop:seq-3Mac
- proc-macro-workshop:seq-4Mac
- proc-macro-workshop:seq-5Mac
- proc-macro-workshop:seq-6Mac
- proc-macro-workshop:seq-7Mac
- proc-macro-workshop:seq-8Mac