多分类中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计算可由下图概括:
多分类中TP/TN/FP/FN的计算_第1张图片

为了方便理解,举个例子说明。
假设某三分类任务的混淆矩阵如下:
多分类中TP/TN/FP/FN的计算_第2张图片
类别1(记为label1)的TP/TN/FP/FN计算如下图所示:
多分类中TP/TN/FP/FN的计算_第3张图片

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计算下图所示:
多分类中TP/TN/FP/FN的计算_第4张图片

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计算如下:
多分类中TP/TN/FP/FN的计算_第5张图片

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)

如果有错误欢迎指出。

你可能感兴趣的:(多分类中TP/TN/FP/FN的计算)