Scikit-learn: 如何计算真负样本

我在使用Scikit-learn,需要从如下混淆矩阵中计算真阳性(TP)、假阳性(FP)、真负性(TN)和假负性(FN):

[[2 0 3 4] [0 4 5 1] [1 0 3 2] [5 0 0 4]]

我知道如何计算TP、FP和FN,但不知道如何计算TN。谁能告诉我?


回答:

我认为你应该以一对多的方式处理这个多类分类问题(因此,每个2×2表i测量的是一个二元分类问题的表现,即每个观测值是否属于标签i)。因此,你可以为每个单独的标签计算TP、FP、FN、TN。

import numpy as npconfusion_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表示选择哪个类别进行一对多计算    # 行表示实际观测值,列表示预测值    TP = confusion_mat[i,i]  # 正确标记为i    FP = confusion_mat[:,i].sum() - TP  # 错误标记为i    FN = confusion_mat[i,:].sum() - TP  # 错误标记为非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, TNfor i in range(4):    print('计算标签{}的2x2列联表'.format(i))    process_cm(confusion_matrix, i, to_print=True)计算标签0的2x2列联表TP: 2FP: 6FN: 7TN: 19计算标签1的2x2列联表TP: 4FP: 0FN: 6TN: 24计算标签2的2x2列联表TP: 3FP: 8FN: 3TN: 20计算标签3的2x2列联表TP: 4FP: 7FN: 5TN: 18

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注