当前位置: 代码迷 >> 综合 >> 一文弄懂什么是Precision,Recall,F1score,以及accuracy
  详细解决方案

一文弄懂什么是Precision,Recall,F1score,以及accuracy

热度:66   发布时间:2023-11-17 01:08:54.0

近期在做实验的时候一直出现Precision,Recall,F1score,以及accuracy这几个概念,为了防止混淆,在这里写下学习笔记,方便以后复习。

以一个二分类问题为例,样本有正负两个类别。
那么模型预测的结果和真实标签的组合就有4种:TP,FP,FN,TN,如下图所示。
在这里插入图片描述
TP实际为正样本你预测为正样本,FN实际为正样本你预测为负样本,
FP实际为负样本你预测为正样本,TN实际为负样本你预测为负样本

首先我们来谈一个好理解的概念:
Accuracy(准确率)

这个概念的理解就是你预测对的样本数占样本总数的比例,那什么是预测对的样本?什么是总样本? 看上面的图,我们能知道预测正确的样本数是TP,TN;总体的样本数就是四个加起来:TP+FN+FP+TN。 所以根据定义,可以得到Acc的计算公式:


Accuracy=TP+TN/(TP+TN+FP+FN)Accuracy = TP+TN / (TP +TN+FP+FN) Accuracy=TP+TN/(TP+TN+FP+FN)

紧接着我们来看什么是Precision(精确率)
很多人容易把accuracy和precision弄混,无论是叫法还是定义。实际上很简单,区别也很明显。

精确率是针对我们预测结果而言的,它表示的是预测为正的样本中有多少是真正的正样本。那么预测为正就有两种可能了,一种就是把正类预测为正类(TP),另一种就是把负类预测为正类(FP)


Precision=TP/(TP+FP)Precision = TP / (TP + FP) Precision=TP/(TP+FP)

随后是召回率(Recall):

召回率是针对我们原来的样本而言的,它表示的是样本中的正例有多少被预测正确了。那也有两种可能,一种是把原来的正类预测成正类(TP),另一种就是把原来的正类预测为负类(FN)。

Recall=TP/(TP+FN)Recall = TP / (TP + FN) Recall=TP/(TP+FN)

一般情况下,召回率和精确率是针对某一个类别说的,比如正类别的Recall,负类别的Recall等。如果你是10分类,那么可以有1这个类别的Precision,2这个类别的Precision,3这个类别的Recall等。而没有类似全部数据集的Recall或Precision这种说法。 通常对于二分类,我们说正类的recall和precision。

补充:
在信息检索领域,精确率和召回率又被称为查准率和查全率,

查准率=检索出的相关信息量 / 检索出的信息总量
查全率=检索出的相关信息量 / 系统中的相关信息总量

F1-score 是基于召回率和精确率计算的:

F1score=2?Precision?Recall/(Precision+Recall)F1score = 2*Precision*Recall / (Precision+Recall) F1score=2?Precision?Recall/(Precision+Recall)

参考:https://blog.csdn.net/u014380165/article/details/77493978

  相关解决方案