如何理解 4x4 混淆矩阵?

How to understand a 4x4 confusion matrix?

我正在使用 scikit 学习决策树将一组数据分为四个类别之一。一般来说,我是机器学习和编码的新手,正在尝试了解混淆矩阵。

所以当我使用 sci-kits 混淆矩阵时,我得到了一个四乘四的矩阵。我能够弄清楚这些列是对每个类别所做的预测(例如 'Predicted A, Predicted B...')。但是,我对这些行代表什么感到困惑。此外,某些预测是否有可能不进入混淆矩阵。我发现有些列没有必要的总计数。这是为什么?

unique, counts = np.unique(classif_predict, return_counts=True)
print('Predicted:',dict(zip(unique, counts)))

_unique, _counts = np.unique(classif_test, return_counts=True)
print('Tested:',dict(zip(_unique, _counts)))


pd.DataFrame(
    confusion_matrix(classif_test, class_predict), 
    columns = ['AGN Predicted', 'BeXRB Predicted', 'HMXB Predicted', 'SNR Predicted']
)

我的输出如下所示:

Predicted: {'AGN': 7, 'BeXRB': 25, 'HMXB': 7, 'SNR': 2}
Tested: {'AGN': 10, 'BeXRB': 22, 'HMXB': 7, 'SNR': 2}
AGN Predicted       BeXRB Predicted     HMXB Predicted      SNR Predicted             
        3                  3                   4                  0
        2                 13                   6                  1
        0                  3                   4                  0
        0                  2                   0                  0
​```

混淆矩阵将帮助您确定模型的 class 说明中哪些是正确的,哪些不是。只用两个class想一想就更容易理解了。

Here is how a confusion matrix works:

在这个矩阵中我们只有两个可能的class,"NO"和"YES"。列代表预测值,线代表实际(真实)值。该矩阵对评估模型的说明是:

  • 正确 class将 50 个样本化为 "NO"。 (这些被称为 真否定

  • misclassfied 5 个样本作为 "NO",而那些应该是 "YES"。 (这些被称为假阴性

  • misclass 化 10 个样本作为 "YES",而那些应该是 "NO"。 (这些被称为误报

  • 正确 class将 100 个样本化为 "YES"。 (这些被称为真阳性

为了检查每个 class 的预测数量,您必须对列中的值求和:该模型预测了 55 "NO" 和 110 "YES"。

要检查每个 class 上有多少真实样本,您必须对行中的值求和:样本真实为 60 "NO"s 和 105 "YES"s。

两种情况的总数都是165,这是评估的样本总数。

Specifically for your problem:

当你制作一个 4x4 混淆矩阵时,逻辑以相同的方式工作,每个 "extra" class 都会添加一个额外的行和列。在您的输出中,总和都可以:

Predicted: {'AGN': 7, 'BeXRB': 25, 'HMXB': 7, 'SNR': 2}
Tested: {'AGN': 10, 'BeXRB': 22, 'HMXB': 7, 'SNR': 2}

假设 "Tested" 是您的真实价值:

  • 这意味着您有 10 个 "AGN" 个样本,但您的模型只 class 验证了其中的 7 个(显然只有 3 个正确)。
  • 您还有 22 个 "BeXRB" 个样本,您的模型 class 将 25 个样本 "BeXRB" 化为 "BeXRB"(显然只有 13 个正确)。

编辑:

矩阵上的值与 PREDICTED 输出(dict)中的值不匹配,您可能会检查:(我添加了 SUM 列和行)

             Pred AGN      Pred BeXRB          Pred HMXB        Pred SNR        SUM
AGN True        3                 3               4                 0            10
BeXRB True      2                13               6                 1            22
HMXB True       0                 3               4                 0            7
SNR True        0                 2               0                 0            2

SUM:            5                21              14                 1

鉴于您提供的信息量,我无法为您提供更多帮助,但您应该检查您的 classif_predict 数组。

如果您使用的是 Jupyter 笔记本,运行不同顺序的单元格可能会由于变量值的变化而引发这种行为。如果是这种情况,请尝试 运行 按预期顺序再次进行。

行代表已预测的 class 的实例(通过我们使用的算法),列代表已知真实值的实例。

行:预测值 列:实际值

在您的情况下,了解 4*4 矩阵表示您的预测变量中有 4 个不同的值,namely:AGN,BeXRB,HMXB,SNR。 还有一件事,值的正确 class 化将在从左上角到右下角的对角线 运行 上,所有其他值都被错误class化。

this is an example of a 4*4 matrix 请注意,绿色值将被正确 class 化,红色是错误 class 化的值。