前言
准确率、精确率、召回率是由F1-score这个评估指标牵扯而出,而这个评估指标经常用在分类效果的评测上,所以想着学学。在学习F1-score过程中,看到F1-score的定义,然后又引出了一些其他的问题。
1. F1-score
F1-score 是一种综合度量分类模型性能的指标,将模型的精确率(precision)和召回率(Recall) 通过加权的方式合并,适用于正负样本不均衡的场景。
1. 分类问题基本概念
先要了解了解什么叫做TP、FP、FN、TN。因为后面的定义会用到。根据以下这个表格就比较好理解了,正例负例是问题一开始定义的(正 Positives,负 Negatives),然后预测正确与否就决定了True 和 False。
实际正例 | 实际负例 | |
---|---|---|
预测正例 | True Positives(TP) | False Negatives(FN) |
预测负例 | False Positives(FP) | True Negatives(TN) |
2. 准确率 Accuracy 、精确率 precision 、 召回率 Recall
针对分类模型的性能,有三个主要的评估指标。我一开始从准确率和精确率的含义去看,看的晕晕的,后来先试着从词的字面去理解,然后再通过例子理解之后就通了许多。
2.1. 准确率
从字面意思上理解准确率,就是预测的准确程度。那自然包含了正例与负例,因此准确率是正例与负例都考虑,表示预测正确的正、负例占总预测数量的比例,用公式表示为:
ACC=TP+TNTP+TN+FP+FNACC = \frac{TP+TN}{TP+TN+FP+FN}ACC=TP+TN+FP+FNTP+TN
2.2. 精确率
从字面意思上理解精确率,就是精确程度,精确嘛,那一般是考虑的正面,正向的精度,因此精确率只针对正例,表示预测正确的正例数量占预测正确正、负例数量的比例,表示用公式表示:
Precision=TPTP+TN
Precision = \frac{TP}{TP+TN}
Precision=TP+TNTP
2.3. 召回率
从字面意思上理解召回率,就是在预测的结果里成功召回了多少,召回率也只针对正例,表示预测的正确的正例的数量占实际正例的数量的比例,用公式表示为
Recall=TPTP+NP
Recall=\frac{TP}{TP+NP}
Recall=TP+NPTP
3. F1-score 计算
回到一开始提到的F1值,它的定义为:将模型的精确率(precision)和召回率(Recall) 通过加权的方式合并。因此,它的公式可以表示为:
F1=2×Precision×RecallPrecision+Recall
F1=\frac{2×Precision×Recall}{Precision+Recall}
F1=Precision+Recall2×Precision×Recall
准确率比较好理解,就不举例了,主要举例说明Precision以及Recall。还有举例说明若有多个类别,如何计算F1值。
4. 举例说明
4.1. 红球例子
一个袋子里有 100 个球,其中:
- 红球(正)有 20 个
- 蓝球(负)有 80 个
你想“只”抓出红球,结果抓出了 30 个球,其中:
- 抓到的红球(TP) = 10
- 抓到的蓝球(误抓,FN) = 20
- 没抓到的红球(漏抓,FP) = 10
因此精确率可以通过公式计算为 10/30 * 100% = 33%;召回率通过计算则为 10(TP)/ 20 (TP+FP) * 100% = 50%。
4.2. 情感分类任务
假设有一个情感分类任务,情感类别包括:
- 正面(Positive)
- 负面(Negative)
- 中立(Neutral)
实际数据分布为:
- 正面评论:100条
- 负面评论:100条
- 中立评论:100条
模型的预测结果:
模型预测结果中,有 90 条正面评论(60条为实际正面、30条为实际中立),110条负面评论(80条为实际负面、30条为实际中立),100条中立评论(50条为实际中立,20条为实际正面,30条为实际负面)
此时可以将总评分改为使用多个维度的F1-score并取平均,公式为
score=1N∑i=1NF1i
score = \frac{1}{N} \sum_{i=1}^{N}F1_{i}
score=N1i=1∑NF1i
N为类别总数,总共3个类别。当正面评论为正(P)时,负面评论以及中立评论为负(N),当负面评论为正(P)时,正面评论以及中立评论为负(N),当中立评论为正(P)时,负面评论以及正面评论为负(N),因此可以计算score为
a. 正面评论的 F1-score
- TP:60;
- FP:30;
- FN:40 条正面评论被漏掉了(100 - 60)。
精确率(Precision)
Precisionpositive=TPTP+FP=6060+30=6090=0.67
\text{Precision}_{\text{positive}} = \frac{\text{TP}}{\text{TP} + \text{FP}} = \frac{60}{60 + 30} = \frac{60}{90} = 0.67
Precisionpositive=TP+FPTP=60+3060=9060=0.67
召回率(Recall)
Recallpositive=TPTP+FN=6060+40=60100=0.60
\text{Recall}_{\text{positive}} = \frac{\text{TP}}{\text{TP} + \text{FN}} = \frac{60}{60 + 40} = \frac{60}{100} = 0.60
Recallpositive=TP+FNTP=60+4060=10060=0.60
F1-score
F1positive=2×0.67×0.600.67+0.60≈0.63
F1_{\text{positive}} = 2 \times \frac{0.67 \times 0.60}{0.67 + 0.60} \approx 0.63
F1positive=2×0.67+0.600.67×0.60≈0.63
b. 负面评论的 F1-score
- TP:80;
- FP:30 ;
- FN:20 条负面评论被漏掉了(100 - 80)。
精确率(Precision)
Precisionnegative=TPTP+FP=8080+30=80110≈0.73
\text{Precision}_{\text{negative}} = \frac{\text{TP}}{\text{TP} + \text{FP}} = \frac{80}{80 + 30} = \frac{80}{110} \approx 0.73
Precisionnegative=TP+FPTP=80+3080=11080≈0.73
召回率(Recall)
Recallnegative=TPTP+FN=8080+20=80100=0.80
\text{Recall}_{\text{negative}} = \frac{\text{TP}}{\text{TP} + \text{FN}} = \frac{80}{80 + 20} = \frac{80}{100} = 0.80
Recallnegative=TP+FNTP=80+2080=10080=0.80
F1-score(负面)
F1negative=2×0.73×0.800.73+0.80≈0.76
F1_{\text{negative}} = 2 \times \frac{0.73 \times 0.80}{0.73 + 0.80} \approx 0.76
F1negative=2×0.73+0.800.73×0.80≈0.76
c. 中立评论的 F1-score
- TP:50;
- FP:50;
- FN:50 条中立评论没有被预测为中立(100 - 50)。
精确率(Precision)
Precisionneutral=TPTP+FP=5050+50=50100=0.50
\text{Precision}_{\text{neutral}} = \frac{\text{TP}}{\text{TP} + \text{FP}} = \frac{50}{50 + 50} = \frac{50}{100} = 0.50
Precisionneutral=TP+FPTP=50+5050=10050=0.50
召回率(Recall)
Recallneutral=TPTP+FN=5050+50=50100=0.50
\text{Recall}_{\text{neutral}} = \frac{\text{TP}}{\text{TP} + \text{FN}} = \frac{50}{50 + 50} = \frac{50}{100} = 0.50
Recallneutral=TP+FNTP=50+5050=10050=0.50
F1-score(中立)
F1neutral=2×0.50×0.500.50+0.50=0.50
F1_{\text{neutral}} = 2 \times \frac{0.50 \times 0.50}{0.50 + 0.50} = 0.50
F1neutral=2×0.50+0.500.50×0.50=0.50
d. 总评分(score)计算
score=13(F1positive+F1negative+F1neutral)
score = \frac{1}{3} \left( F1_{\text{positive}} + F1_{\text{negative}} + F1_{\text{neutral}} \right)
score=31(F1positive+F1negative+F1neutral)
score=13(0.63+0.76+0.50)=13×1.89=0.63
score = \frac{1}{3} \left( 0.63 + 0.76 + 0.50 \right) = \frac{1}{3} \times 1.89 = 0.63
score=31(0.63+0.76+0.50)=31×1.89=0.63
5. 总结
F1-score可以较好的平衡精确率和召回率,但是在不同的业务场景下可能会有重点关注精确率或召回率的情况。例如 FP 的成本高(误报正例)场景下,那就重点关注精确率,若是 FN 的成本高(假负也就是真正例),那就重点关注召回率。