总是记不住的精度,回召率和F1 Score

撰写本文的契机

在学机器学习的时候,开头第一章的内容就是Precision,ReCall和F1 Score,第一次看的时候感觉概念挺简单的,但是每每在文献或者技术博客上看到相关内容的时候,总是记不住,总是会被TP、NP,TF和NF这样的术语弄晕。

今天恰巧找到机会重新理解了一遍相关的概念,写下这个博客,记录此刻我对这些概念的理解(人话翻译),以便今后快速复习。

以下内容参考自李航老师的 《统计学习与方法》这篇技术博客

正文

概念背景

机器学习的两大任务,一个分类,一个回归。接下来要介绍的概念跟回归的关系不大,它们主要用于描述一个模型分类的效果。“它们”主要是:

  • Precision(精度)
  • ReCall(回召率)
  • F1 Score

我们这三个概念主要针对二分类。例如,现在我们手上有个模型,它只认识猫,理想情况下,你给它输入一张不是猫的照片,例如狗,它给你输出Negative;如果你给它输入猫的照片,它会输出Positive。

但是有朋友要举手了,说不对呀,即使是多分类的任务,也能用上文那几个参数去描述。原来,上述那三个参数是针对每个类别进行描述的。这是什么意思呢?

例如,我们手头拿着一个多分类器,它可以识别苹果(0)、香蕉(1)、雪梨(2)、西瓜(3)和其它(4),括号里面的数字是这些类别的标签。

在研究模型对“苹果”这一个类别的表现时,我们认为,所有的类别可以分为苹果和非苹果。例如,我们给模型输入一张雪梨的图片,模型正确地输出了“2”,但是对于当前“苹果”这个类别来说,它就是非苹果,所以我们仍然认为它的输出结果为Negative,只有模型输出的数字为“0”,我们才认为当前模型的输出为Positive。

理解了上一段话的意思以后,我们不难知道,对于多分类任务中,每个类别都有一套对应的Precision、Recall和F1 Score。

三个概念

数据背景:想象我们现在有许多张图片,其中有许多张猫的照片,另外的照片都不是猫。猫的照片我们称之为正样本,非猫的照片我们称之为负样本。

TP FN TN FP

现在我手里拿着一个只认识猫的分类器,理想情况下,我输入猫的照片,它输出Positive,否则Negative。

我输入了一张猫的图片,此时分类器里所应当地输出了Positive,那么,这张图片是猫,是正样本,并且预测正确,那么这个样本的英文名是: True Positive,简称TP

我现在又输入了一张猫的图片,但是分类器输出了Negative,毕竟我们的分类器肯定不是十全十美的,这正是标题这几个概念存在的意义。此时,我输入的是正样本,并且预测错误,那么这个样本的英文名为:False Negative,简称FN

类似地,我输入了一张不是猫的图片,分类器给出了Negative,这个样本为负样本并且预测正确,英文名为True Negative,简称TN;我又输入了一张不是猫的照片,但是分类器给出Positive,这个样本是负样本并且预测错误,英文名为False Positive,简称FP

呼,仔细读下来确实很拗口。我们输入的任何一张图片必定会被归类为上述四类中的其中一类。也就是说,如果我们手上有N张图片,那么

TP+FN+TN+FP=N

三个概念的人话翻译

终于到我们的三个主角了。如果你已经记住了上一个小节的描述,那么我们的主题很快就能接受啦。如果还没理解,还请再花两分钟认真理解一下上节内容。

想象现在你的手上还是有好多张图片,猫和非猫,而且我们的分类器还是只认识猫。并且你把这些图片一股脑地扔进了分类器,得到了每张图片对应的输出,也就是一堆Negative和Positive,并且你已经把每一张图片都分成上一节里提到的四个类别。

Precision

我现在问你,你手上这堆Positive,正确的比例是多少? 我可是顺利从小学毕业,那当然是Positive里,预测正确的正样本个数比上预测为正样本的个数。那前者等于多少?哦,TP。后者呢?哦,TP+FP。二者一除,我们得到了上述问题的答案,那么恭喜你,你成功计算出了Precision。

Recall

我再问你,你手上这堆猫的图片,预测正确的比例是多少? 呜,这个问题也很简单,但是好像要饶个圈圈。小学的知识告诉我,公式是预测正确的猫的个数比上所有猫的图片的个数。那预测正确的猫的个数是多少?猫是正样本,那就是TP!那我手里有几张猫的照片?我想,应该是预测正确的猫的个数加上预测错误的猫的个数,前者是TP,那后者重新翻译一下,应该是样本是正样本,并且预测错误,FN!那猫的个数应该就是TP+FN。终于,你计算出了Recall。

F1 Score

这个概念比较简单,可以把F1 Score理解为Precision和Recall在数值上的一个综合表现,公式如下:

F1 Score = (2PrecisionRecall)/(Precision+Recall)

总结

终于讲完了此刻我所理解的这三个概念,其实比较容易记错的就是TP,FP,TN,FN这几个概念,一旦记混淆,之后的数值也计算不出来了。最后如果有人耐心看完了上面这一大串的文字,那么请接受我由衷的感谢,谢谢你的捧场。最后再放一张图来结束这次的记录吧。
三大概念的可视化图

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在PyTorch中,可以使用一些函数和类来计算精度、回归率和F1 score等指标。 对于分类问题中的精度,可以通过以下步骤来计算: 1. 首先,需要将模型预测的结果转化为类别标签。可以使用torch.argmax()函数来获取每个样本预测概率最大的类别。 2. 然后,将预测的类别与真实标签进行比较,以确定模型预测的准确性。可以使用torch.eq()函数来判断预测结果是否与真实标签相等。 3. 最后,计算预测准确的样本数占总样本数的比例,即精度。可以使用torch.mean()函数来计算平均精度。 以下是一个示例代码片段,演示了如何计算精度: ```python # 导入必要的模块 import torch import torch.nn.functional as F # 假设有模型输出和真实标签 outputs = torch.tensor([[0.2, 0.8], [0.6, 0.4], [0.3, 0.7]]) labels = torch.tensor([1, 0, 1]) # 获取预测类别 predicted_labels = torch.argmax(outputs, dim=1) # 计算精度 accuracy = torch.mean(torch.eq(predicted_labels, labels).float()) print(accuracy.item()) # 输出精度值 ``` 对于二分类问题中的回归率,可以使用混淆矩阵来计算。可以使用Sklearn库中的metrics模块来计算回归率。 以下是一个示例代码片段,演示了如何使用混淆矩阵计算回归率: ```python from sklearn.metrics import confusion_matrix, recall_score # 假设有模型输出和真实标签 outputs = torch.tensor([1, 0, 1, 1]) labels = torch.tensor([1, 0, 0, 1]) # 获取预测类别 predicted_labels = torch.round(torch.sigmoid(outputs)).int() # 计算混淆矩阵 conf_matrix = confusion_matrix(labels.numpy(), predicted_labels.numpy()) # 计算回归率 recall = recall_score(labels.numpy(), predicted_labels.numpy()) print(conf_matrix) # 输出混淆矩阵 print(recall) # 输出回归率 ``` F1 score是精确率和召回率的加权平均,可以使用Sklearn库中的metrics模块来计算。 以下是一个示例代码片段,演示了如何计算F1 score: ```python from sklearn.metrics import f1_score # 假设有模型输出和真实标签 outputs = torch.tensor([0.2, 0.7, 0.3, 0.8]) labels = torch.tensor([0, 1, 1, 1]) # 获取预测类别 predicted_labels = torch.round(torch.sigmoid(outputs)).int() # 计算F1 score f1 = f1_score(labels.numpy(), predicted_labels.numpy()) print(f1) # 输出F1 score ``` 以上示例代码演示了在PyTorch中计算精度、回归率和F1 score等指标的方法。根据具体问题的要求和使用的库可以适当进行调整和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值