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

Confusion matrix for values labeled as TP, TN, FP, FN

我有一个 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()

提前致谢!

解决这个问题的最简单方法如下:

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是dataframe变量。因此我们计算列的各个条目并简单地打印相同的条目。

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

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()