用于多标签分类的 AUC-ROC

数据挖掘 多类分类 多标签分类 公制 奥克
2021-10-11 21:01:46

嘿伙计们,我目前正在阅读有关 AUC-ROC 的信息,并且我已经了解了二进制情况,并且我认为我了解了多分类情况。现在我对如何将其推广到多标签情况有点困惑,我找不到任何关于此事的直观解释性文字。

我想通过一个例子来澄清我的直觉是否正确,让我们假设我们有一些包含三个类(c1、c2、c3)的场景。

让我们从多分类开始:

当我们考虑多分类设置时,我们分别查看每个标签。

因此,如果我们正在查看标签 c1 的 ROC,我们可以将 c2 和 c3 捆绑在一起作为“底片”。

即,当我们有一个属于 c1 的样本时,我们只看 c1 的预测分数,并构建正样本的预测分数分布。然后我们查看属于 c2 和 c3 的样本,即聚集在一起的负样本,我们查看它们的预测分数并构建这些分数的分布。这会导致如下所示:

正样本和负样本分布

基于这些分布,我们可以根据一些阈值获得 TPR 和 FPR,并计算 c1 的 ROC。然后我们可以对 c2 和 c3 做同样的事情,如果我们愿意,我们可以对三个 ROC 曲线进行平均,以获得问题的总分。

无论如何,这是我的直觉。

但是多标签场景呢?

这是事情让我感到困惑的时候。我们是否以完全相同的方式计算它?我知道我们仍然单独计算每个班级的 ROC,但我不确定如何考虑它。假设我们从类 c1 的角度来看它。对于每个被视为 c1 的样本(也可能是 c2 和 c3),我们将模型对 c1 的预测分数添加到分布中。但是如果我们遇到例如一个被认为是 c2 AND c3 的样本(这在多类场景中不会发生),我们是否将其视为两个负样本并在分布中添加两个预测分数?

我在这里思考正确的轨道吗?

2个回答

我不确定我是否理解您的想法,但我的理解正在遵循 - 也许它可以帮助您从另一个角度看待它。

具有可能类的多标签分类问题n可以看作是n二元分类器。如果是这样,我们可以简单地计算每个二元分类器的 AUC ROC 并将其平均。这有点棘手 - 有不同的平均方法,尤其是:

'macro':计算每个标签的指标,并找到它们的未加权平均值。这没有考虑标签不平衡。

'weighted':计算每个标签的指标,并找到它们的平均值,按支持度加权(每个标签的真实实例数)。

如此所述。

还有另一种选择(可能最接近您的看法):

'micro':通过将标签指标矩阵的每个元素视为标签来全局计算指标。

这是在这里实现的。

还有第四个选项,我不太明白:

'samples':计算每个实例的指标,并找到它们的平均值。

我一直在使用自己的weighted平均值。

免责声明:我自己对多类或多标签任务的 AUC/ROC 并不熟悉。

  • 根据这个问题及其答案,多类分类的情况似乎并不那么简单。对于简单地跨类取平均值,我会非常谨慎,因为 AUC/ROC 的属性可能不会普遍成立。
  • 话虽这么说,如果多类提到的方法被认为是足够的,那么没有理由不对多标签使用相同的方法:为 N 个类计算每个实例 N 次已经是你在多类中所做的(或应该做的)案例:与一个类不相关的实例实际上被算作真正的否定。ROC 曲线本质上是为二进制分类任务构建的,这意味着每个实例都被准确地分类为真/假阳性/阴性四种可能性之一。