1. 基本概念
ground truth 0 | ground truth1 | |
---|---|---|
predict 0 | TN | FN |
predict 1 | FP | TP |
TP、True Positive 真阳性:预测为正,实际也为正
FP、False Positive 假阳性:预测为正,实际为负
FN、False Negative 假阴性:预测与负、实际为正
TN、True Negative 真阴性:预测为负、实际也为负
P r e c i s i o n = T P T P + F P Precision=\frac{TP}{TP+FP} Precision=TP+FPTP
分母:判定为正类的个数;分子:判定为正类中实际为正类的个数
R
e
c
a
l
l
=
T
P
T
P
+
F
N
Recall=\frac{TP}{TP+FN}
Recall=TP+FNTP
分母:实际为正类的个数; 分子:实际为正类的当中判定为正类的个数
F
1
=
2
P
R
P
+
R
F_1=\frac{2PR}{P+R}
F1=P+R2PR
F1分数(F1 Score),是统计学中用来衡量二分类模型精确度的一种指标。它同时兼顾了分类模型的精确率和召回率。F1分数可以看作是模型精确率和召回率的一种加权平均,它的最大值是1,最小值是0;F1-Score越大模型越好
F β = ( 1 + β 2 ) P R β 2 P + R F_\beta = (1+\beta^2)\frac{PR}{\beta^2P+R} Fβ=(1+β2)β2P+RPR
除了F1分数之外,F0.5分数和F2分数,在统计学中也得到了大量应用,其中,F2分数中,召回率的权重高于精确率,而F0.5分数中,精确率的权重高于召回率。
对于多标签问题,引入Micro-F1和Macro-F1,以下对Micro-F1和Macro-F1的计算全已三个类别ABC为例:
Macro-F1
M
a
c
r
o
_
P
=
P
A
+
P
B
+
P
C
3
M
a
c
r
o
_
R
=
R
A
+
R
B
+
R
C
3
M
a
c
r
o
_
F
1
=
2
M
a
c
r
o
_
P
∗
M
a
c
r
o
_
R
M
a
c
r
o
_
P
+
M
a
c
r
o
_
R
Macro\_P=\frac{P_A+P_B+P_C}{3} \\ \,\\ Macro\_R = \frac{R_A+R_B+R_C}{3}\\ \,\\ Macro\_F1=\frac{2Macro\_P*Macro\_R}{Macro\_P+Macro\_R}
Macro_P=3PA+PB+PCMacro_R=3RA+RB+RCMacro_F1=Macro_P+Macro_R2Macro_P∗Macro_R
Micro-F1
T
P
ˉ
=
T
P
A
+
T
P
B
+
T
P
C
3
F
P
ˉ
=
F
P
A
+
F
P
B
+
F
P
C
3
F
N
ˉ
=
F
N
A
+
F
N
B
+
F
N
C
3
M
i
c
r
o
_
R
=
T
P
ˉ
T
P
ˉ
+
F
N
ˉ
M
i
c
r
o
_
P
=
T
P
ˉ
T
P
ˉ
+
F
P
ˉ
M
i
c
r
o
_
F
1
=
2
M
i
c
r
o
_
R
∗
M
i
c
r
o
_
P
M
i
c
r
o
_
R
+
M
i
c
r
o
_
P
\bar{TP}=\frac{TP_A+TP_B+TP_C}{3}\\ \,\\ \bar{FP}=\frac{FP_A+FP_B+FP_C}{3}\\ \,\\ \bar{FN}=\frac{FN_A+FN_B+FN_C}{3}\\ \,\\ Micro\_R = \frac{\bar{TP}}{\bar{TP}+\bar{FN}}\\ \,\\ Micro\_P = \frac{\bar{TP}}{\bar{TP}+\bar{FP}}\\ \,\\ Micro\_F1 = \frac{2Micro\_R*Micro\_P}{Micro\_R+Micro\_P}
TPˉ=3TPA+TPB+TPCFPˉ=3FPA+FPB+FPCFNˉ=3FNA+FNB+FNCMicro_R=TPˉ+FNˉTPˉMicro_P=TPˉ+FPˉTPˉMicro_F1=Micro_R+Micro_P2Micro_R∗Micro_P
2.一个例子
实际情况:AAAABBBCC
预测情况:AABCBBCBC
A | B | C | 总和 | |
---|---|---|---|---|
TP | 2 | 2 | 1 | 5 |
FP | 0 | 2 | 2 | 4 |
FN | 2 | 1 | 1 | 4 |
M
i
c
r
o
_
R
=
5
/
9
Micro\_R = 5/9
Micro_R=5/9
M
i
c
r
o
_
P
=
5
/
9
Micro\_P=5/9
Micro_P=5/9
M
i
c
r
o
_
F
1
=
5
/
9
Micro\_F_1 = 5/9
Micro_F1=5/9
M a c r o _ P = 1 + 1 / 2 + 1 / 3 3 = 11 18 Macro\_P=\frac{1+1/2+1/3}{3}=\frac{11}{18} Macro_P=31+1/2+1/3=1811
M
a
c
r
o
_
R
=
1
/
2
+
2
/
3
+
1
/
2
3
=
5
9
Macro\_R = \frac{1/2+2/3+1/2}{3}=\frac{5}{9}
Macro_R=31/2+2/3+1/2=95
M
a
c
r
o
_
F
1
=
0.582
Macro\_F1=0.582
Macro_F1=0.582
3. 程序实现
from sklearn.metrics import f1_score, accuracy_score
# 多标签分类,这里有两个样本
y_true = [[1,1,0],[0,0,1]]
y_pred = [[1,0,1],[1,0,1]]
macro_f1 = f1_score(y_true, y_pred, average="macro")
micro_f1 = f1_score(y_true, y_pred, average="micro")
acc = accuracy_score(y_true, y_pred)
print(macro_f1)
print(micro_f1)
print(acc)
输出:
0.4444444444444444
0.5714285714285715
0.0
注意:sklearn中的accurracy在多标签分类中,只有在一个样本中所有标签都预测正确才算这个样本预测正确。
sklearn.metrics指标
精度 :sklearn.metrics.accuracy_score(y_true,y_pre)
F1值:f1_score(y_true, y_pred, labels=None, pos_label=1, average='binary', sample_weight=None)
precision:precision_score(y_true, y_pred, labels=None, pos_label=1, average='binary')
recall:recall_score(y_true, y_pred, labels=None, pos_label=1, average='binary', sample_weight=None)
4. Recall@K
所谓top-K推荐是从最后的得分排序列表中返回前K个结果。precision 准确率是检索出相关结果数与检索出的结果总数的比率,衡量的是检索系统的查准率;Recall@K召回率是指前topK结果中检索出的相关结果数和库中所有的相关结果数的比率,衡量的是检索系统的查全率。
假设预测结果得分从高到低依次为:
1, 1, 0, 1, 0, 1, 0, 0, 0, 1
真实标签中共有5正5负
则:
recal@1 = 正样本数/all_positive = 1/5
5. micro-F1和macro-F1的区别
- micro-f1 使用场景:在计算公式中考虑到了每个类别的数量,所以适用于数据分布不平衡的情况;但同时因为考虑到数据的数量,所以在数据极度不平衡的情况下,数量较多数量的类会较大的影响到F1的值;
- macro-f1 没有考虑到数据的数量,所以会平等的看待每一类(因为每一类的precision和recall都在0-1之间),会相对受高precision和高recall类的影响较大
- weighted-F1和macro-F1的区别在于:macro-F1对每一类都赋予了相同的权重,而weighted-F1则根据每一类的样本所占比例分别赋予不同的权重