p
r
e
c
i
s
i
o
n
猫
precision_猫
precision猫=
识
别
为
猫
类
正
确
的
数
量
识
别
为
猫
类
总
数
量
{识别为猫类正确的数量} \over {识别为猫类总数量}
识别为猫类总数量识别为猫类正确的数量
precision为50%物理意义:该模型识别出猫的可参考价值(准确率)为50%
r
e
c
a
l
l
猫
recall_猫
recall猫=
标
签
为
猫
类
识
别
正
确
的
数
量
标
签
为
猫
类
的
总
数
量
{标签为猫类识别正确的数量} \over {标签为猫类的总数量}
标签为猫类的总数量标签为猫类识别正确的数量
recall为10%物理意义:该模型在猫、狗、猪中正确识别出猫的概率为10%
f
1
猫
f1_猫
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
猫
{2*precision_猫*recall_猫} \over {precision_猫+recall_猫}
precision猫+recall猫2∗precision猫∗recall猫
f1物理意义:模型综合能力
ner例子说明:
defcalculatePRAndF1():withopen("data/testresult.txt", mode="r", encoding="utf8")as f:
allLocPre =0# 所有被模型识别为地名的数量
locPreCorr =0# 被模型识别为地名且正确的数量
allLocReal =0# 所有地名的数量for line in f:
line = line.strip()if line =="":continue
word, realFlag, preFlag = line.split()# 字, 实际状态标注, 预测状态标注if preFlag !="O":
allLocPre +=1if realFlag !="O":
allLocReal +=1if realFlag == preFlag:ifnot realFlag =="O":
locPreCorr +=1
precision = locPreCorr *1.0/ allLocPre # 查准率
recall = locPreCorr *1.0/ allLocReal # 召回率
f1 =2* precision * recall /(precision + recall)# 调和平均return precision, recall, f1