通俗理解TP、FP、TN、FN

通俗理解TP、FP、TN、FN

通俗理解TP、FP、TN、FN

虽然学了很多遍,但还是经常弄混这几个概念。实在是太绕了,真真假假,假假真真。归根到底,其实是没有正确理解两个标志位的含义。

基本概念

首先要明白两个标志位分别表示什么含义?第一位表示分类器是否预测正确,第二位表示分类器的预测结果。因此我们应该从后往前看,先看预测结果是Positive(正样本)还是Negative(负样本)?再看分类器有没有预测正确。

TP:True Positive,分类器预测结果为正样本,实际也为正样本,即正样本被正确识别的数量。

FP:False Positive,分类器预测结果为正样本,实际为负样本,即误报的负样本数量。

TN:True Negative,分类器预测结果为负样本,实际为负样本,即负样本被正确识别的数量。

FN:False Negative,分类器预测结果为负样本,实际为正样本,即漏报的正样本数量。

扩展概念

TP+FN:真实正样本的总和,正确分类的正样本数量+漏报的正样本数量。

FP+TN:真实负样本的总和,负样本被误识别为正样本数量+正确分类的负样本数量。

TP+TN:正确分类的样本总和,正确分类的正样本数量+正确分类的负样本数量。

TP和TN都好理解,直接看第二位P和N就很明确的看出代表的是正样本还是负样本的数量。怎么一眼看出来FP、FN实际代表的是正样本还是负样本的数量呢?这里先看预测结果是Postive还是Negative,然后取反即可。FP即正样本取反,实际是代表负样本的数量。FN即负样本取反,实际代表的是正样本的数量。

Accuracy:准确率

Accuracy表征的是预测正确的样本比例。不过通常不用这个概念,主要是因为预测正确的负样本这个没有太大意义。

样本总数Accuracy=(TP+TN)/样本总数

Precision:查准率

Precision表征的是预测正确的正样本的准确度,查准率等于预测正确的正样本数量/所有预测为正样本数量。Precision越大说明误检的越少,Precision越小说明误检的越多。

Precision=TP/(TP+FP)

Recall:查全率

Recall表征的是预测正确的正样本的覆盖率,查全率等于预测正确的正样本数量/所有正样本的总和TP+FN实际就是Ground Truth的数量。Recall越大说明漏检的越少,Recall越小说明漏检的越多。

Recall=TP/(TP+FN)

我刚开始觉得这几个名词很难理解。其实究其原因,主要是中文翻译的问题。precision翻译为准确,recall翻译为召回。如果把它们分别翻译为查准率,查全率,相信大家很容易就理解其含义了。

Reference

【子豪兄】机器学习基础_哔哩哔哩_bilibili

JimmyHua:AP,mAP计算详解(代码全解)

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyTorch本身不提供计算TPFPFNTN的函数,但可以使用numpy或其他库进行计算。下面给出一个使用numpy计算TPFPFNTN的示例代码: ```python import numpy as np # y_pred为预测结果,y_true为真实结果,threshold为分类阈值 def calculate_confusion_matrix(y_pred, y_true, threshold=0.5): y_pred = np.where(y_pred > threshold, 1, 0) # 根据阈值将预测结果转为0或1 tp = ((y_pred == 1) & (y_true == 1)).sum() # 计算TP fp = ((y_pred == 1) & (y_true == 0)).sum() # 计算FP fn = ((y_pred == 0) & (y_true == 1)).sum() # 计算FN tn = ((y_pred == 0) & (y_true == 0)).sum() # 计算TN return tp, fp, fn, tn ``` 其中,y_pred和y_true都是numpy数组,分别表示模型的预测结果和真实结果。threshold是分类阈值,可以根据需要调整。函数返回TPFPFNTN四个值。使用时,可以将预测结果和真实结果转为numpy数组后传入该函数,如下所示: ```python import torch # 创建一个大小为(2, 3)的模型输出结果Tensor y_pred = torch.tensor([[0.2, 0.5, 0.8], [0.1, 0.4, 0.9]]) # 创建一个大小为(2, 3)的真实结果Tensor y_true = torch.tensor([[0, 1, 1], [1, 0, 1]]) # 将Tensor转为numpy数组,并调用calculate_confusion_matrix函数计算混淆矩阵 tp, fp, fn, tn = calculate_confusion_matrix(y_pred.numpy(), y_true.numpy()) print("TP: {}, FP: {}, FN: {}, TN: {}".format(tp, fp, fn, tn)) ``` 输出结果为: ``` TP: 3, FP: 1, FN: 1, TN: 5 ``` 说明模型预测了3个正例,但其中有1个是错误的;有1个正例没有被预测出来;有5个负例被正确预测。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值