Precision、Recall、F1-score、Micro-F1、Macro-F1、Recall@K

1. 基本概念

ground truth 0ground truth1
predict 0TNFN
predict 1FPTP

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_PMacro_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_RMicro_P

2.一个例子

实际情况:AAAABBBCC
预测情况:AABCBBCBC
ABC总和
TP2215
FP0224
FN2114

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)
precisionprecision_score(y_true, y_pred, labels=None, pos_label=1, average='binary')
recallrecall_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则根据每一类的样本所占比例分别赋予不同的权重
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值