OneVsRest 分类为什么概率总和为 1?

数据挖掘 Python 分类 多标签分类 正常化
2022-03-14 18:16:58

我在 sklearn 中使用 OneVsRest 分类器。所以一个多标签模型,每个类有 4 个模型(我有 4 个类)。因此,当我调用 predict_proba 方法时,我得到一个包含 4 列的数组,每列对应于该类的概率。例如

0     1     2     3 
0.6  0.2   0.1   0.1 
0.8  0.05  0.05  0.1 

我知道所有模型都相互独立训练,并且指定的类即 0 1 2 3 是否采用 4 的 argmax。多标签分类的引擎盖下还会发生什么,使得每行总和为 1?为什么以及如何发生这种正常化。

2个回答

多类分类中,假设每个实例都只有一个类。示例:一项民意调查询问人们在蓝色 (B)、黄色 (Y) 或红色 (R) 中最喜欢的颜色。每个实例代表一个人的答案,B、Y 或 R。“one vs. rest”方法意味着训练了 3 个二元分类器:

  • “B”与“非 B”,其中 Y 和 R 实例标记为“非 B”
  • “Y”与“非 Y”,其中 B 和 R 实例标记为“非 Y”
  • “R”与“not R”,其中 B 和 Y 实例标记为“not R”

这些模型不是独立的假设,例如:

  • 如果类是 B,那么它不能是 Y 或 R。
  • 如果类不是 Y,那么它是 B 或 R。
  • 等等。

在概率术语中,这转化为总和为 1 的分布,因为如果一个类具有高概率,那么任何其他类也不可能也具有高概率(互补)。这就是为什么二进制分类器预测的概率每个都除以总和(详见Ben 的回答)。

注意:相比之下,多标签分类允许每个实例有任意数量的类。在上面的示例中,就好像民意调查要求人们说出他们是否喜欢每种颜色 B、Y、R。一个人可能喜欢所有 3 种颜色,也可能都不喜欢。这意味着二元分类器是独立的:

  • 对于“B vs not B”,B 和“not B”类都可以包含同时具有 Y 或 R(或两者)的实例。
  • 因此,分类器是独立的:知道一个实例具有 B 类并不意味着其他类的任何事情。

归一化是直接除以概率之和:source

至于为什么,总和为 1 显然是可取的,但除此之外,它可能是主观的。这里有一个讨论表明简单的归一化优于其他聚合,但如果我正确阅读链接的论文,这是一个边际收益,并且与其他校准方法和数据集不一致。我也喜欢这里的答案,它强调要使这些都有意义,您需要经过合理校准的单个模型预测,在这种情况下,总和应该已经接近 1。