标记为 TP、TN、FP、FN 的值的混淆矩阵

Posted

技术标签:

【中文标题】标记为 TP、TN、FP、FN 的值的混淆矩阵【英文标题】:Confusion matrix for values labeled as TP, TN, FP, FN 【发布时间】:2021-03-31 20:13:00 【问题描述】:

我有一个 Pandas 数据框,想为一列绘制混淆矩阵。

该列的值是已标记为“假阴性”、“假阳性”、“真阴性”和“真阳性”的字符串。

由于这些不是典型的 True/False 值,我如何使用这些值生成混淆矩阵(类似于 scikit-learn/matplotlib 生成的那些)?

(编辑澄清) 假设我在一列中有以下值:

['True Positive', 'True Negative', 'False Positive', 'False Negative', 'True Negative', ..., True Positive', 'False Negative']

我可以将这些值汇总为 TP、TN、FP、FN 的总数。但是,我想显示一个混淆矩阵,类似于使用以下生成的混淆矩阵:

disp = sklearn.metrics.ConfusionMatrixDisplay(confusion_matrix=cm)
disp = disp.plot(cmap="Blues")
matplot.lib.pyplot.plt.show()

提前致谢!

【问题讨论】:

嗨@Irina,请为您的问题提供可重复的输入。在不提供帮助他人生成您提到的数据的代码的情况下期望帮助是不公平的,请参阅How to Ask。另外,请提供您的尝试更可取的预期输出。 谢谢,@AkshaySehgal - 添加了更多详细信息。希望这将有助于澄清问题。谢谢! 【参考方案1】:

解决这个问题的最简单方法是这样的:

TP = 0
TN = 0
FP = 0
FN = 0

for label in df.ColumnName:
    
    if label == "True Positive":
        TP  += 1
    elif label == "True Negative":
        TN += 1
    elif label == "False Positive":
        FP += 1
    else:
        FN += 1

print("Confusion Matrix : ")
print(f"[TP] [FP]")
print(f"[FN] [TN]")

这里df 是数据框变量。因此,我们计算列的各个条目并简单地打印相同的条目。

另一种小得多的方法如下:

print(df['ColumnName'].value_counts()

然后使用以下代码绘制值

import matplotlib.pyplot as plt
import numpy as np

data = [[TP, FP],[FN, TN]]
heatmap = plt.pcolor(data)
plt.colorbar(heatmap)
plt.show()

【讨论】:

谢谢 - 有了这些值,是否可以绘制图形混淆矩阵(类似于使用 sklearn.metrics 中的 ConfusionMatrixDisplay,然后使用 disp.plot)? 不,您不能这样做,因为 ConfusionMatrixDisplay 会绘制 ROC 曲线,该曲线是为正在训练的模型计算的。我们通过改变分类阈值来计算真阳性率和假阳性率的值。因此,试图找到数据集的 ROC 没有任何意义。混淆矩阵也是分析模型性能的评估指标,所以我不确定你为什么要为数据集打印它。如果此答案有帮助,请接受并投票。 感谢您的回答!目前,我不想显示 ROC 曲线;我正在尝试显示与此类似的矩阵:res.cloudinary.com/practicaldev/image/fetch/s--v8krdHq4--/… @Irina 我已经编辑了答案以包括绘图问题的答案。如果这是您正在寻找的并且它有所帮助,那么请投票并接受答案。如有任何后续问题,请回复评论。 谢谢!是否可以让它看起来像一个典型的混淆矩阵(每个正方形内每个象限的数字 s、1/0 标签和颜色?

以上是关于标记为 TP、TN、FP、FN 的值的混淆矩阵的主要内容,如果未能解决你的问题,请参考以下文章

数据挖掘概念杂记

sklearn中ConfusionMatrix

正解TP/FP/TN/FN评价指标

Python使用pandas_ml输出混淆矩阵以及从混淆矩阵衍生出来的其他指标:TPTNFPFNTPRTNR(SPC)PPVNPVFPRFDRFNRACCF1MCC等

样本类别不均会导致混淆矩阵的变化吗

混淆矩阵(Confusion Matrix)