Scikit学习:如何计算真负数 [英] Scikit-learn: How to calculate the True Negative
问题描述
我正在使用Scikit学习,并且需要从像这样的混淆矩阵中计算出真阳性(TP),假阳性(FP),真阴性(TN)和假阴性(FN):>
I am using Scikit-learning and I need to calculate the True positive (TP), the False Positive (FP), the True Negative (TN) and the False Negative (FN) from a confusion matrix like this:
[[2 0 3 4]
[0 4 5 1]
[1 0 3 2]
[5 0 0 4]]
我知道如何计算TP,FP和FN,但我不知道如何获得TN.有人可以告诉我吗?
I know how to calculate the TP, the FP and the FN but I don't know how to get the TN. Can someone tell me?
推荐答案
我认为您应该以一对多"的方式对待这种多类分类(因此,每个2x2表i
都可以衡量一个二进制分类问题(每个obs是否属于标签i
).因此,您可以为每个标签计算TP,FP,FN,TN.
I think you should treat this multi-class classification in a one-vs-the-rest manner (so each 2x2 table i
measures the performance of a binary classification problem that whether each obs belongs to label i
or not). Consequently, you can calculate the TP, FP, FN, TN for each individual label.
import numpy as np
confusion_matrix = np.array([[2,0,3,4],
[0,4,5,1],
[1,0,3,2],
[5,0,0,4]])
def process_cm(confusion_mat, i=0, to_print=True):
# i means which class to choose to do one-vs-the-rest calculation
# rows are actual obs whereas columns are predictions
TP = confusion_mat[i,i] # correctly labeled as i
FP = confusion_mat[:,i].sum() - TP # incorrectly labeled as i
FN = confusion_mat[i,:].sum() - TP # incorrectly labeled as non-i
TN = confusion_mat.sum().sum() - TP - FP - FN
if to_print:
print('TP: {}'.format(TP))
print('FP: {}'.format(FP))
print('FN: {}'.format(FN))
print('TN: {}'.format(TN))
return TP, FP, FN, TN
for i in range(4):
print('Calculating 2x2 contigency table for label{}'.format(i))
process_cm(confusion_matrix, i, to_print=True)
Calculating 2x2 contigency table for label0
TP: 2
FP: 6
FN: 7
TN: 19
Calculating 2x2 contigency table for label1
TP: 4
FP: 0
FN: 6
TN: 24
Calculating 2x2 contigency table for label2
TP: 3
FP: 8
FN: 3
TN: 20
Calculating 2x2 contigency table for label3
TP: 4
FP: 7
FN: 5
TN: 18
这篇关于Scikit学习:如何计算真负数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!