首页 > Python机器学习 阅读数:37

查全率、查准率与F1分数

查全率、查准率都和正类样本密切相关。为了便于理解这几个概念,我们给出如图 1 所示的示意图。

查全率与查准率
图 1:查全率与查准率

图中实心小圆圈代表正类样本,空心小圆圈代表负类样本,大圆形区域(由两个半圆区域构成)代表被分类系统判断为正类的样本。

查全率

查全率(Recall,简称 R,又称召回率)表示分类准确的正类样本数占全部正类样本总数的比例。针对二分类有:

R=TP/(TP+FN)


举例来说,在信息检索领域,假设一个搜索引擎返回的相关页面只有 9 个,另外 3 个相关页面并没有返回而是散落在观测范围之外。那么此时,就查询系统而言,查全率就是指检索出来的相关页面占系统中全部相关页面的百分比。查全率可用图 2 中的子图 (a) 表示。查全率反映的是检索的全面性,其补数就是漏检率。

查全率和查准率示意图
图 2:查全率和查准率示意图

查准率

查准率(Precision,简称 P)表示被预测正确的正类样本数占分类器判定为正类样本总数的比例。针对二分类有:

P=TP/(TP+FP)


需要注意的是,查准率和准确率(Accuracy)是有区别的。不论是查准率,还是查全率,它们的分子部分都是 TP(真正类样本),但分母部分有所不同。而准确率说的是被正确分类的样本数占全体样本数的比例,它的分子部分是两种被正确分类的样本数,一种是真正类样本数,一种是真负类样本数,分母则是全体样本数。

回到查准率上,我们还用信息检索的案例来说明。假设搜索引擎一共返回 13 个页面,其中 9 个是真正相关的,而另外 4 个是搜索引擎“自以为”相关的(实际并不相关)。查准率反映的是检索的准确性,即真正相关页面数占全部检索出的相关页面数的比例,其补数是误检率。查准率可用图 2 中的子图 (b) 表示。

一般来说,查准率高时,查全率往往偏低;反之,查全率高时,查准率往往偏低。举例来说,在历史上,有这么一句狠话:“宁可错杀一千,不可放过一人”。这里我们不去追寻这句话的含义,单纯从机器学习的角度来看,它追求的就是查全率,为了查全,不惜错杀,这时查准率势必不高。

F1分数

为了兼顾查准率和查全率,人们还提出了另一个衡量标准—F1 分数:

F1=2×{(P × R)/(P + R)}


本质上,F1 分数其实是 P 和 R 的调和平均数:

1/F1=1/2{(1/P)+(1/R)}


不同应用对查准率和查全率的重视程度不同,因此 F1 分数并不是对 P 和 R 的简单平均。例如,在商品推荐系统中,为了尽可能少地打搅用户,提升用户体验,往往希望检测出来的商品信息尽可能准确,这就要求查准率高。而在逃犯检索系统中,往往希望尽可能少地漏掉逃犯,此时查全率更重要。

为了有所倾向,F1 分数更通用的表达形式 Fβ 如下:

1/Fβ=1/(1+β2){(1/p)+(β2/R)}


其中,β 是衡量查全率和查准率相对重要性的比值。由上面公式可进一步推导出:

Fβ=(1+β2){1/(1/P+β2/R)}

从上面公式可以看出,当 1>β 时,β2/R 项占比较大,即查全率对 Fβ 的影响更大;反之,当 1<β 时,查准率对 Fβ 的影响更大;当 1=β 时,Fβ 即为 F1