准确率、召回率和F值的概念和计算

下面简单列举几种常用的推荐系统评测指标:

1、准确率与召回率(Precision & Recall)

准确率和召回率是广泛用于信息检索和统计学分类领域的两个度量值,用来评价结果的质量。其中精度是检索出相关文档数与检索出的文档总数的比率,衡量的是检索系统的查准率;召回率是指检索出的相关文档数和文档库中所有的相关文档数的比率,衡量的是检索系统的查全率。

一般来说,Precision就是检索出来的条目(比如:文档、网页等)有多少是准确的,Recall就是所有准确的条目有多少被检索出来了。

正确率、召回率和 F 值是在鱼龙混杂的环境中,选出目标的重要评价指标。不妨看看这些指标的定义先:

    1. 正确率 = 提取出的正确信息条数 /  提取出的信息条数     

    2. 召回率 = 提取出的正确信息条数 /  样本中的信息条数    

两者取值在0和1之间,数值越接近1,查准率或查全率就越高。   

    3. F值  = 正确率 * 召回率 * 2 / (正确率 + 召回率) (F 值即为正确率和召回率的调和平均值)

不妨举这样一个例子:某池塘有1400条鲤鱼,300只虾,300只鳖。现在以捕鲤鱼为目的。撒一大网,逮着了700条鲤鱼,200只虾,100只鳖。那么,这些指标分别如下:

正确率 = 700 / (700 + 200 + 100) = 70%

召回率 = 700 / 1400 = 50%

F值 = 70% * 50% * 2 / (70% + 50%) = 58.3%

不妨看看如果把池子里的所有的鲤鱼、虾和鳖都一网打尽,这些指标又有何变化:

正确率 = 1400 / (1400 + 300 + 300) = 70%

召回率 = 1400 / 1400 = 100%

F值 = 70% * 100% * 2 / (70% + 100%) = 82.35%        

由此可见,正确率是评估捕获的成果中目标成果所占得比例;召回率,顾名思义,就是从关注领域中,召回目标类别的比例;而F值,则是综合这二者指标的评估指标,用于综合反映整体的指标。

当然希望检索结果Precision越高越好,同时Recall也越高越好,但事实上这两者在某些情况下有矛盾的。比如极端情况下,我们只搜索出了一个结果,且是准确的,那么Precision就是100%,但是Recall就很低;而如果我们把所有结果都返回,那么比如Recall是100%,但是Precision就会很低。因此在不同的场合中需要自己判断希望Precision比较高或是Recall比较高。如果是做实验研究,可以绘制Precision-Recall曲线来帮助分析。

2、综合评价指标(F-Measure)

P和R指标有时候会出现的矛盾的情况,这样就需要综合考虑他们,最常见的方法就是F-Measure(又称为F-Score)。

F-Measure是Precision和Recall加权调和平均:

当参数α=1时,就是最常见的F1,也即

可知F1综合了P和R的结果,当F1较高时则能说明试验方法比较有效。

3、E值

E值表示查准率P和查全率R的加权平均值,当其中一个为0时,E值为1,其计算公式:

b越大,表示查准率的权重越大。

4、平均正确率(Average Precision, AP)

平均正确率表示不同查全率的点上的正确率的平均。


在信息检索、分类体系中,有一系列的指标,搞清楚这些指标对于评价检索和分类性能非常重要,因此最近根据网友的博客做了一个汇总。

准确率、召回率、F1

信息检索、分类、识别、翻译等领域两个最基本指标是召回率(Recall Rate)和准确率(Precision Rate),召回率也叫查全率,准确率也叫查准率,概念公式:


    召回率(Recall)      =  系统检索到的相关文件 / 系统所有相关的文件总数

   准确率(Precision) =  系统检索到的相关文件 / 系统所有检索到的文件总数

图示表示如下:


注意:准确率和召回率是互相影响的,理想情况下肯定是做到两者都高,但是一般情况下准确率高、召回率就低,召回率低、准确率高,当然如果两者都低,那是什么地方出问题了。一般情况,用不同的阀值,统计出一组不同阀值下的精确率和召回率,如下图:

 

 

如果是做搜索,那就是保证召回的情况下提升准确率;如果做疾病监测、反垃圾,则是保准确率的条件下,提升召回。

所以,在两者都要求高的情况下,可以用F1来衡量。

F1 = 2 * P * R / (P + R) 


公式基本上就是这样,但是如何算图1中的A、B、C、D呢?这需要人工标注,人工标注数据需要较多时间且枯燥,如果仅仅是做实验可以用用现成的语料。当然,还有一个办法,找个一个比较成熟的算法作为基准,用该算法的结果作为样本来进行比照,这个方法也有点问题,如果有现成的很好的算法,就不用再研究了。

 

AP和mAP(mean Average Precision)

mAP是为解决P,R,F-measure的单点值局限性的。为了得到 一个能够反映全局性能的指标,可以看考察下图,其中两条曲线(方块点与圆点)分布对应了两个检索系统的准确率-召回率曲线

 

可以看出,虽然两个系统的性能曲线有所交叠但是以圆点标示的系统的性能在绝大多数情况下要远好于用方块标示的系统。

从中我们可以 发现一点,如果一个系统的性能较好,其曲线应当尽可能的向上突出。

更加具体的,曲线与坐标轴之间的面积应当越大。

最理想的系统, 其包含的面积应当是1,而所有系统的包含的面积都应当大于0。这就是用以评价信息检索系统的最常用性能指标,平均准确率mAP其规范的定义如下:(其中P,R分别为准确率与召回率)


ROC和AUC

ROC和AUC是评价分类器的指标,上面第一个图的ABCD仍然使用,只是需要稍微变换。



回到ROC上来,ROC的全名叫做Receiver Operating Characteristic。

ROC关注两个指标

   True Positive Rate ( TPR )  = TP / [ TP + FN] ,TPR代表能将正例分对的概率

   False Positive Rate( FPR ) = FP / [ FP + TN] ,FPR代表将负例错分为正例的概率

在ROC 空间中,每个点的横坐标是FPR,纵坐标是TPR,这也就描绘了分类器在TP(真正的正例)和FP(错误的正例)间的trade-off。ROC的主要分析工具是一个画在ROC空间的曲线——ROC curve。我们知道,对于二值分类问题,实例的值往往是连续值,我们通过设定一个阈值,将实例分类到正类或者负类(比如大于阈值划分为正类)。因此我们可以变化阈值,根据不同的阈值进行分类,根据分类结果计算得到ROC空间中相应的点,连接这些点就形成ROC curve。ROC curve经过(0,0)(1,1),实际上(0, 0)和(1, 1)连线形成的ROC curve实际上代表的是一个随机分类器。一般情况下,这个曲线都应该处于(0, 0)和(1, 1)连线的上方。如图所示。


用ROC curve来表示分类器的performance很直观好用。可是,人们总是希望能有一个数值来标志分类器的好坏。


于是Area Under roc Curve(AUC)就出现了。顾名思义,AUC的值就是处于ROC curve下方的那部分面积的大小。通常,AUC的值介于0.5到1.0之间,较大的AUC代表了较好的Performance。


AUC计算工具:

http://mark.goadrich.com/programs/AUC/

P/R和ROC是两个不同的评价指标和计算方式,一般情况下,检索用前者,分类、识别等用后者。

参考链接:

http://www.vanjor.org/blog/2010/11/recall-precision/

http://bubblexc.com/y2011/148/

http://wenku.baidu.com/view/ef91f011cc7931b765ce15ec.html


转自于博客: http://blog.youkuaiyun.com/mousever/article/details/48622163


微信公众号:自然语言处理技术,欢迎关注: 
这里写图片描述
<think>好的,我现在需要帮助用户了解如何在电脑上计算召回率准确率。首先,我得回顾一下召回率准确率的定义,以及它们在机器学习中的意义。根据用户提供的引用,特别是引用[2],准确率是正确预测数占总预测数的比例,而召回率是正确预测为正类的数量占实际正类数量的比例。用户可能已经了解这些概念,但需要具体的编程实现方法。 接下来,我需要考虑用户可能的背景。他们可能已经使用过一些机器学习库,比如scikit-learn,但不确定如何具体计算这些指标。因此,我应该提供分步骤的指导,包括如何获取预测结果真实标签,然后应用公式或库函数来计算。 用户的问题提到了编程方法或工具,所以应该涵盖两种方法:手动计算使用现成的库。手动计算可以帮助理解背后的原理,而使用库函数则更高效可靠。例如,scikit-learn中的accuracy_scorerecall_score函数可以直接使用,但用户可能需要知道如何备输入数据。 此外,用户可能对混淆矩阵中的TP、FP、TN、FN不太清楚,需要解释这些术语,并展示如何从混淆矩阵中计算这些。例如,TP是真实为正类且预测为正类的样本数,FN是真实为正类但预测为负类的样本数等。这部分需要详细说明,因为这是计算的基础。 然后,我需要确保给出的代码示例正确无误,并且能够直接运行。例如,使用numpy来模拟真实标签预测结果,然后计算各个指标。同时,提醒用户在实际应用中可能需要处理数据预处理、模型预测等步骤,但这里重点放在指标计算上。 另外,用户可能对准确率召回率的应用场景有疑问,比如在什么情况下应该更关注哪一个指标。虽然用户没有直接问这个问题,但在解释计算步骤时,可以简要提及,比如在医疗诊断中召回率更重要,避免漏诊。 还要注意用户提到的引用[3],其中提到预测为1的情况,比如图像识别中的类别判断。这可能意味着用户在处理二分类问题,因此在示例中使用二分类的情况会更合适,同时也可以提到多分类情况下的处理方法,比如宏平均或微平均。 最后,确保回答结构清晰,分步骤说明,并给出相关的问题建议,帮助用户深入理解。例如,如何可视化混淆矩阵,或者如何处理多分类问题中的指标计算,这些可以作为后续的问题。</think>### 如何在电脑上计算召回率准确率 召回率(Recall)准确率(Accuracy)是机器学习中评估分类模型性能的重要指标。以下是分步实现方法: --- #### **1. 理解基本概念** - **准确率**:正确预测的样本数占总样本数的比例 公式:$$ \text{Accuracy} = \frac{TP + TN}{TP + TN + FP + FN} $$ - **召回率**:正确预测为正类的样本数占实际正类样本数的比例 公式:$$ \text{Recall} = \frac{TP}{TP + FN} $$ 其中,$TP$(真正例)、$FP$(假正例)、$TN$(真负例)、$FN$(假负例)构成混淆矩阵[^2]。 --- #### **2. 编程实现方法** ##### **方法1:手动计算** 假设已有真实标签(`y_true`)预测结果(`y_pred`): ```python import numpy as np # 示例数据(二分类问题) y_true = np.array([1, 0, 1, 1, 0, 1]) # 真实标签 y_pred = np.array([1, 0, 0, 1, 0, 1]) # 预测标签 # 计算混淆矩阵 TP = np.sum((y_true == 1) & (y_pred == 1)) FP = np.sum((y_true == 0) & (y_pred == 1)) TN = np.sum((y_true == 0) & (y_pred == 0)) FN = np.sum((y_true == 1) & (y_pred == 0)) # 计算准确率召回率 accuracy = (TP + TN) / (TP + TN + FP + FN) recall = TP / (TP + FN) print(f"准确率:{accuracy:.2f},召回率:{recall:.2f}") ``` ##### **方法2:使用机器学习库(如scikit-learn)** ```python from sklearn.metrics import accuracy_score, recall_score # 直接调用函数 accuracy = accuracy_score(y_true, y_pred) recall = recall_score(y_true, y_pred) # 默认针对正类(标签1) print(f"准确率:{accuracy:.2f},召回率:{recall:.2f}") ``` --- #### **3. 关键注意事项** 1. **数据对齐**:确保`y_true``y_pred`长度相同且标签编码一致。 2. **多分类问题**:召回率准确率需指定计算方式(如宏平均`macro`或加权平均`weighted`)[^3]。 3. **场景选择**:在类别不平衡时,准确率可能不敏感,需结合召回率、精确综合评估[^2]。 --- #### **应用示例** - **图像识别**:若模型需检测“猫”的图片,召回率高意味着漏检少(FN低)。 - **医疗诊断**:高召回率可减少漏诊,但可能增加误诊(FP高)。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值