多分类中TP/TN/FP/FN的计算

TP: True Positive
FN: False Negative
FP: False Positive
TN: True Negative

二分类任务中的TP/TN/FP/FN容易理解和求取,但实际中常常需要通过求多分类任务中某类别的TP/TN/FP/FN进而计算其他性能参数,如recall,precision,f1-score,TPR,TNR等等。本文主要讲解TP/TN/FP/FN的计算。

在多分类任务中,各类别的TP/TN/FP/FN计算可由下图概括:
五分类混淆矩阵中类4的TP/TN/FP/FN计算图示

为了方便理解,举个例子说明。
假设某三分类任务的混淆矩阵如下:
三分类任务的混淆矩阵
类别1(记为label1)的TP/TN/FP/FN计算如下图所示:
在这里插入图片描述

label1_TP=9;
label1_TN=6+1+1+7=15;
label1_FP=0+1=1;
label1_FN=3+2=5;

类别2的TP/TN/FP/FN计算下图所示:
在这里插入图片描述

label2_TP=6;
label2_TN=9+2+1+7=19;
label2_FP=3+1=4;
label2_FN=0+1=1;

同理,类别3的TP/TN/FP/FN计算如下:
在这里插入图片描述

label3_TP=7;
label3_TN=9+3+0+6=18;
label3_FP=2+1=3;
label3_FN=1+1=2;

此外,附上python代码方便大家。

import numpy as np

# 1-混淆矩阵
confusion_matrix = np.array(
[[9,  3,  2], 
 [ 0, 6,  1],
 [ 1, 1,  7]])
 
# 2-TP/TN/FP/FN的计算
FP = confusion_matrix .sum(axis=0) - np.diag(confusion_matrix )  
FN = confusion_matrix .sum(axis=1) - np.diag(confusion_matrix )
TP = np.diag(confusion_matrix )
TN = confusion_matrix .sum() - (FP + FN + TP)
FP = FP.astype(float) 
FN = FN.astype(float)
TP = TP.astype(float)
TN = TN.astype(float)
print(TP)
print(TN)
print(FP)
print(FN)

# 3-其他的性能参数的计算
TPR = TP/(TP+FN) # Sensitivity/ hit rate/ recall/ true positive rate
TNR = TN/(TN+FP) # Specificity/ true negative rate
PPV = TP/(TP+FP) # Precision/ positive predictive value
NPV = TN/(TN+FN) # Negative predictive value
FPR = FP/(FP+TN) # Fall out/ false positive rate
FNR = FN/(TP+FN) # False negative rate
FDR = FP/(TP+FP) # False discovery rate
ACC = TP/(TP+FN) # accuracy of each class
print(TPR)
print(TNR)
print(PPV)
print(NPV)
print(FPR)
print(FNR)
print(FDR)
print(ACC)

如果有错误欢迎指出。

评论 11
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值