在机器学习、深度学习快速发展的时代,模型和技巧层出不穷,那么就需要有一定的指标去量化地评价这些新的idea,是否work,优化的幅度有多大。
在分类任务中,通常可以用混淆矩阵比较直观地分析,各类别的预测准确度,模型在哪个类别的性能较低,以确定后续优化的方向。
预测 \ 标签 | 猫 | 狗 | 总计 |
---|---|---|---|
猫 | 16 | 1 | 17 |
狗 | 4 | 19 | 23 |
总计 | 20 | 20 | 40 |
据混淆矩阵
所示,共40张图待预测,其中20张猫、20张狗。
可直观得知,模型对于狗的预测效果更好。
此处引入TP、FP、FN、TN的概念
以猫为例:
预测 \ 标签 | 正样本 | 负样本 |
---|---|---|
预测为正(Positive) | TP | FP |
预测为负(Negative) | FN | TN |
TP: True Positive
FP: False Positive
FN: False Negative
TN: True Negative
Positive和Negative指代预测的结果,即是否为猫。
True和False指预测的正确性。
如上例, T P = 16 , F P = 1 , F N = 4 , T N = 19 TP=16, FP=1, FN=4, TN=19 TP=16,FP=1,FN=4,TN=19
注:针对每个类别,都有对应的TP, …, TN。上例指代是猫。(狗的TP=19,其他可以类推)
精确率(Precision)是预测正确占预测为正样本的比例。公式如下:
P r e c i s i o n = T P T P + F P = T P A l l P r e d i c t Precision = \frac {TP}{TP + FP}=\frac {TP}{All \ Predict} Precision=TP+FPTP=All PredictTP
就像战场中有10个目标,你射了12发导单,射中了8发,那么 T P = 8 , F P = 4 , P r e c i s i o n = 8 / 12 = 66.7 % TP=8, FP=4, Precision=8/12=66.7\% TP=8,FP=4,Precision=8/12=66.7%
召回率(Recall)是预测正确占正样本总数的比例。需要和精确率分清的是,精确率描述的是精准度,召回率描述的是对目标的覆盖率。公式如下:
R e c a l l = T P T P + F N = T P A l l T a r g e t Recall = \frac {TP}{TP + FN} = \frac {TP}{All \ Target} Recall=TP+FNTP=All TargetTP
举回上面战场的例子,10个目标,射了12发导单,射中了8发,那么 T P = 8 , F N = 2 , R e c a l l = 8 / 10 = 80 % TP=8,FN=2,Recall=8/10=80\% TP=8,FN=2,Recall=8/10=80%
可以看出,你的召回率高于准确率,10个目标中了8个(80%),但12发导单才中了8个(66.7%)。
不同场合对模型的性能有不同的侧重需求,除了性能甚至还会有时效性的需求,在算力有限的情况下,这其实都是个trade off(折中)。
但在学术研究,或者客观评价模型、技巧的优劣上,往往要综合评价它的Precision和Recall,由此引出了F1-Score。
F1-Score是Precision(P)和Recall(R)的调和平均值。
由下公式可以看出,F1-Score同时取决于P和R,两者皆大则大,且最大值为1。
1 F 1 = 1 P + 1 R F 1 = 2 T P 2 T P + F P + F N \frac {1}{F_1} = \frac {1}{P} + \frac {1}{R} \\ F1 = \frac {2TP} {2TP + FP + FN} F11=P1+R1F1=2TP+FP+FN2TP