如何使大混淆矩阵更易于阅读?

数据挖掘 可视化 混淆矩阵
2021-09-19 03:32:03

我最近发布了一个包含 369 个类的数据集(链接)。我对它们进行了一些实验,以了解分类任务的难度。通常,如果有混淆矩阵来查看所犯错误的类型,我会喜欢它。然而,一个369×369 矩阵不实用。

有没有办法给出大混淆矩阵的重要信息?例如,通常有很多不那么有趣的 0。是否可以对类进行排序,以便大多数非零条目位于对角线周围,以便显示多个矩阵,这些矩阵是完整混淆矩阵的一部分?

这是一个大混淆矩阵的例子

野外例子

EMNIST的图 6看起来不错:

在此处输入图像描述

很容易看出很多案例在哪里。然而,这些只是26类。如果使用整个页面而不是仅使用一列,这可能是 3 倍,但这仍然只是326=78类。甚至不接近 369 类 HASY 或 1000 类 ImageNet。

也可以看看

我在CS.stackexchange上的类似问题

3个回答

您可以应用我在硕士论文(第 48 页)中描述的称为混淆矩阵排序 (CMO) 的技术:

  1. 以这样的方式对列/行进行排序,以使大多数错误沿对角线排列。
  2. 将混淆矩阵拆分为多个块,以便可以轻松打印/查看单个块 - 并且您可以删除一些块,因为数据点很少。

很好的副作用:此方法还会自动将相似的类聚集在一起。我的硕士论文图 5.12 显示:

在此处输入图像描述

您可以应用混淆矩阵排序clana

我建议不要尝试重新排序列和行,而是尝试找到其他方法来可视化数据。

这是一种可能的替代建议。您可以使用某种聚类算法将类聚类到大约 20 个聚类中,其中每个聚类中有〜 20 个类,将相似的类放在同一个聚类中(例如,如果两个类经常相互混淆,他们应该更有可能在同一个集群中)。然后你可以显示一个粗粒度的混淆矩阵,每个集群有一行/列;细胞在(i,j) 显示集群中某个类的实例的频率 i 预计在集群中有一些类 j. 此外,您可以拥有约 20 个细粒度的混淆矩阵:对于每个集群,您可以显示类的混淆矩阵,每个集群中的约 20 个类。当然,您也可以通过使用层次聚类和多粒度的混淆矩阵来扩展它。

可能还有其他可能的可视化策略。

作为一个普遍的哲学观点:它也可能有助于澄清你的目标(你想从可视化中得到什么)。您可以区分两种可视化用途:

  • 探索性分析:你不确定你在寻找什么;您只需要一个可以帮助您在数据中寻找有趣模式或工件的可视化。

  • 带有信息的图形:您有一个特定的信息希望读者带走,并且您想设计一个可视化来帮助支持该信息或为该信息提供证据。

它可能会帮助您了解您要瞄准的目标,然后设计一个针对该目标的可视化:

  • 如果您正在进行探索性分析,而不是尝试选择一个完美的可视化,尝试创建尽可能多的可视化通常会有所帮助。不要担心它们中的任何一个是否完美;如果每一个都有缺陷也没关系,因为每一个都可能给你对数据的不同看法(它可能在某些方面是好的,而在其他方面可能是坏的)。

  • 如果您要传达特定的信息或要开发的主题,请寻找支持该主题的可视化。在不知道主题/信息可能是什么的情况下,很难提出具体的建议。

了解 EMNIST 混淆矩阵为什么看起来不错很重要。

但我觉得奇怪的是,他们没有保持较高数字最暗的颜色,例如,大多数包含零的空未分类的灰色比包含整数的更深。好像不太一致。

我会尝试使用 EMINST 样式,但要保持一致,其中颜色表示单元格中的条目数。白色表示零个整数,黑色表示大多数条目。

一个完美的分类应该是带有完全白色的上下三角形的黑色对角线。如果三角形中有任何灰色斑块,则表明存在问题。即使在 1000 个班级上,这也会有所帮助。对于类是分层的 ImageNet,也许对列进行排序以便子类在父类的右侧分组会导致方形暗斑。

此外,如果您获得图像的前 5 个响应,则类可能不是互斥的,因此 lap_dog 图像的狗分类应该仍然正确,因此在这样的混淆矩阵中,更一般的类应该更暗比精确的分类(如果颜色是标准化的)。因此左上角的正方形是最暗的。