机器学习(ML),自然语言处理(NLP),信息检索(IR)等领域,评估(Evaluation)是一个必要的 工作,而其评价指标往往有如下几点:准确率(Accuracy),精确率(Precision),召回率(Recall)和F1-Measure。
准确率(accuracy)
准确率是指:对于给定的测试数据集,分类器正确分类的样本数与总样本数之比。也就是损失函数是0-1损失时测试数据集上的准确率。
假设总共有100件样品,其中A类样品有60件,B类样品有40件。某分类器从这100件样品中选择了50件,抽到10件A类,40件B类。如果在这50件样品中,准确判定了40件B,错误地将10件A判定成B,那么这一分类器判定的准确率为(40+50)/100=90%。
由准确率,我们的确可以在一些场合,从某种意义上得到一个分类器是否有效,但它并不总是能有效的评价一个分类器的工作。因为如果分类器选择的样品数量过少,那么总可能是正确的结果,可信度却不很高。
精确率(precision)&召回率(recall)
在计算精确率和召回率之前,需要引入TP/FP/FN/TN四种分类:
如果把上述的例子中的B定义为需要找到的目标,那么100件样品中的这40件B就是“正类”,A就是“负类”。
相关(Relevant),正类 | 无关(NonRelevant),负类 | |
被检索到(Retrieved) | true positives(TP 正类判定为正类,例子中就是正确判定B) | false positives(FP 负类判定为正类,"存伪",例子中就是把A却判断为B) |
未被检索到(Not Retrieved) | false negatives(FN 正类判定为负类,"去真",例子中就是把B错判为A) | true negatives(TN 负类判定为负类,也就是正确地找到A) |
那么例子中的分类器的TP=40,FP=10,FN=0,TN=50。
精确率的公式是P=\fac{TP}{TP+FP},它计算的是所有"正确被检索的item(TP)"占所有"实际被检索到的(TP+FP)"的比例。
召回率的公式是R=\fac{TP}{TP+FN},它计算的是所有"正确被检索的item(TP)"占所有"应该检索到的item(TP+FN)"的比例。
F1值就是精确值和召回率的调和均值,F_1=\fac{2PR}{P+R}=\fac{2TP}{2TP+FP+FN}.F1-measure认为精确率和召回率的权重是一样的,但有些场景下,我们可能认为精确率会更加重要,调整参数a,使用Fa-measure可以帮助我们更好的evaluate结果.
F1-measure也可以引申出F_a,F_a=\fac{(a^2+1)PR}{a^2(P+R)}.
准确率和召回率是互相影响的,理想情况下肯定是做到两者都高,但是一般情况下准确率高、召回率就低,召回率低、准确率高,当然如果两者都低,那是什么地方出问题了。一般情况,用不同的阀值,统计出一组不同阀值下的精确率和召回率。
如果是做搜索,那就是保证召回的情况下提升准确率;如果做疾病监测、反垃圾,则是保准确率的条件下,提升召回。所以,在两者都要求高的情况下,可以用F1来衡量。