准确率(Accuracy),精确率/查准率(Precision), 召回率/查全率(Recall)和F1-Measure

        机器学习(ML), 自然语言处理(NLP), 信息检索(IR)等领域, 评估(Evaluation)是一个必要的工作, 而其评价指标往往有如下几点: 准确率(Accuracy), 精确率(Precision), 召回率(Recall) 和 F1-Measure.(注:相对来说,IR 的 ground truth 很多时候是一个 Ordered List, 而不是一个 Bool 类型的 Unordered Collection,在都找到的情况下,排在第三名还是第四名损失并不是很大,而排在第一名和第一百名,虽然都是“找到了”,但是意义是不一样的,因此更多可能适用于 MAP 之类评估指标.)

 

 

本文将简单介绍其中几个概念. 中文中这几个评价指标翻译各有不同, 所以一般情况下推荐使用英文.

现在我先假定一个具体场景作为例子.

 

首先我们可以计算准确率(accuracy), 其定义是: 对于给定的测试数据集,分类器正确分类的样本数与总样本数之比. 也就是损失函数是0-1损失时测试数据集上的准确率.

这样说听起来有点抽象,简单说就是,前面的场景中,实际情况是那个班级有男的和女的两类,某人(也就是定义中所说的分类器)他又把班级中的人分为男女两类. accuracy 需要得到的是此君分正确的人占总人数的比例. 很容易,我们可以得到:他把其中70(20女+50男)人判定正确了, 而总人数是100人,所以它的 accuracy 就是70 %(70 / 100).

由准确率,我们的确可以在一些场合,从某种意义上得到一个分类器是否有效,但它并不总是能有效的评价一个分类器的工作. 举个例子, google 抓取了 argcv 100个页面,而它索引中共有10,000,000个页面, 随机抽一个页面,分类下, 这是不是 argcv 的页面呢?如果以 accuracy 来判断我的工作,那我会把所有的页面都判断为"不是 argcv 的页面", 因为我这样效率非常高(return false, 一句话), 而 accuracy 已经到了99.999%(9,999,900/10,000,000), 完爆其它很多分类器辛辛苦苦算的值, 而我这个算法显然不是需求期待的, 那怎么解决呢?这就是 precision, recall 和 f1-measure 出场的时间了.

再说 precision, recall 和 f1-measure 之前, 我们需要先需要定义 TP, FN, FP, TN 四种分类情况.

按照前面例子, 我们需要从一个班级中的人中寻找所有女生, 如果把这个任务当成一个分类器的话, 那么女生就是我们需要的, 而男生不是, 所以我们称女生为"正类", 而男生为"负类".

 

 

可以很容易看出, 所谓 TRUE/FALSE 表示从结果是否分对了, Positive/Negative 表示我们认为的是"是"还是"不是".

通过这张表, 我们可以很容易得到这几个值:

  • TP=20
  • FP=30
  • FN=0
  • TN=50

精确率/查准率(precision)的公式是P =TP/(TP+FP)   即 TP / 自选P, 这里自选P 是 自选出来的50个认为是“女生” -- 亦即 TP+FP ​, 它计算的是所有"正确被检索的结果(TP)"占所有"实际被检索到的(TP+FP)"的比例.

在例子中就是希望知道此君得到的所有人中, 正确的人(也就是女生)占有的比例. 所以其 precision 也就是40%(20女生/(20女生+30误判为女生的男生)).

召回率/查全率(recall)的公式是R = TP/(TP+FN)   即 TP / 实际P, 这里实际P就是实际上女生的个数, -- 亦即 TP + FN, 它计算的是所有"正确被检索的结果(TP)"占所有"应该检索到的结果(TP+FN)"的比例.

在例子中就是希望知道此君得到的女生占本班中所有女生的比例, 所以其 recall 也就是100%(20女生/(20女生+ 0 误判为男生的女生))

对调和平均直观上的例子

在一个小公园的长椅上坐着看天,徒弟来电话询问一个题目,“轮胎问题”:自行车的前轮胎和后轮胎是相同的,可以交换。但是同样的轮胎在前轮和后轮上使用的时间是不同的。上在前轮上可以行驶500千米,上在后轮上只能行驶300千米。因此,适当的时候交换前轮胎和后轮胎可以让前轮胎和后轮胎同时报废。问题是,行驶多少千米交换合适?这样一对轮胎最多能同时行驶多少千米?

我告诉让他这是个相遇问题、分数工程问题,可能很隐晦,不容易看出来。下面作出详细的解释。

我们先看几个容易解决的同构问题:

一艘轮船从A码头顺流而下到C码头然后原路返回,顺流而下去时速度30千米/时,逆流而上返回20千米/时。求往返平均速度。容易错成(30+20)÷2=25(千米/时),因为往返使用的时间是不同的。事实上结果应该是30和20的调和平均数。2/(1/20+1/30)=2×20×30/(20+30)=24(千米/时)。可以这样解释算是的算理:去时每千米耗时1/30小时,返回时每千米耗时1/20小时,因此在每1千米的路上,往返一次共行驶2千米,耗时(1/20+1/30)小时,也就是每小时行驶2/(1/20+1/30)千米。也可以根据2×20×30/(20+30)的提示这样解释,假设AC之间的航程是20×30千米,往返一次的总路程和总时间分别为2×20×30千米和(20+30)千米。

现在我将这个问题稍稍复杂化一点:问题是,在这条航道上是否存在一点B,顺流而下到B和逆流而上到B用的时间相同?答案是肯定的,也是显然的。我们可以假设,顺流而下的船出发,同时有一艘同样的船逆流而上,两船相遇的地点就是所求的B点。而且这个点很容易确定,AB:BC=3:2。这个点B有这样的特点:从A顺流而下到B所用的时间与从C逆流而上到B所用的时间相等。

我们再看一个更容易理解的问题。

A、C夫妇二人在不同的公司上班,因为乘车次数不同,同样价值的公交乘车卡,A可以用40天,C可以用60天,他们为了同时给公交卡充值,需要在某一天交换公交卡,使得同时用光公交卡中的钱,他们的公交卡最多能同时用多少天?他们应该在几天后交换乘车卡?

显然,他们的公交卡最多能同时使用的天数就是40和60的调和平均数。2×40×60/(40+60)=48(天)。算式很容易理解:假设两个公交卡中共有2×40×60日元,A每天需要花60日元,C每天需要花40日元。显然,48÷2=24天后就应该交换公交卡。这个结果恰好是1÷(1/40+1/60)=24(天)。这也不难理解:A每天用去公交卡的1/40,C每天用去公交卡的1/60,当两人一共用掉1张公交卡的时候,就应该交换公交卡。

现在我们再看看“轮胎问题”进行一个巧妙的假设。我们假设骑自行车的目的就是磨轮胎。让这个自行车变成两辆独轮车——前轮A和后轮C,一条轮胎让A磨每千米磨损1/500,让C磨每千米磨损1/300。A和C同时合作磨轮胎,当刚好磨损掉一条轮胎的时候就应该交换前后轮。此时都行驶了1÷(1/300+1/500)=187.5(千米)。交换后还可以行驶187.5千米,一共行驶了375千米。

 

References

 

from : https://blog.argcv.com/articles/1036.c

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值