在多类分类问题中确定每个类的阈值以获得最佳精度/召回率

数据挖掘 多类分类
2022-03-13 09:41:09

假设我有三节课C1,C2,C3和一个模型M输出分数P样本的每个类别的置信度XIEM(X)=[P(C1),P(C2),P(C3)](注意,我们只想预测一个类)

假设我创建了 3 个一对一精度/召回图,并且我决定每个类别的最佳阈值是

T1=0.6

T2=0.7

T3=0.5

然后我们可以创建分配的逻辑X像这样的班级:

如果指数,i, 的最大分数M大于或等于Ti, 分配XCi. 否则,不要分配X对于任何东西,请参阅下面的两个示例以获取两个输入X

M(X1)=[0.8,0.1,0.1]C1因为最大的问题是0.8这是针对第 1 类和T1<0.8

M(X2)=[0.3,0.6,0.1]None因为最大的分数是0.6这是 2 级的,但是T2>0.6

但是,有些事情告诉我,通过这种方式,我们不会像我们一开始就决定阈值那样为每个类保留最佳精度/召回率,所以我的问题是:

  1. 我们能否为多类分类设置动态阈值,即每个类的阈值同时保持所有类的最佳精度/召回率?
  2. 当我们想要控制每个类的精度/召回率时,是否有更好的方法来根据我上面的问题来决定多类分类的阈值

编辑:

假设我的验证集有以下结果:

conf  pred  target
----+------+-------
0.9    C1     C1
0.8    C1     C1
0.76   C1     C2
.
.
0.93   C2     C2
0.9    C2     C2
0.83   C2     C3
.
.

这难道不会克服一对一休息示例的问题,因为我们现在有信心当涉及所有三个类而不是 3 倍一对一休息?

1个回答

我认为多类和多标签分类之间存在混淆:

  • 多类分类中,每个实例都有一个标签。这意味着分类器返回可能的标签中最有可能的标签,而不是所有可能适用的标签。在概率方面,这意味着所有类的输出概率总和为 1。
  • 多标签分类中,每个实例都可以有任意数量的标签(包括根本没有标签)。这相当于为每个类训练一个独立的模型。在概率方面,每个类别的概率p表示实例有这个标签而不是没有它的可能性。

在多类情况下为每个类应用自定义阈值意味着某些实例可能有零个或多个类,即它将问题转换为多标签。

所以问题应该从一开始就明确定义:

  • 如果是多类,则无法为每个类使用自定义阈值,最可能的类始终是唯一分配的类。
  • 如果是多标签,那么分类器是独立的,可以使用自定义阈值。但问题不同,理论上训练数据应该是一致的,并且包含具有零个或多个标签的实例。

[按照OP的评论编辑]

我说的是多标签,因为实际上您想要做的是某种混合多类/多标签分类。例如,在多类中,实例不可能没有任何标签,如您的X2例如,因为总是有一个最有可能的类(C2在你的例子中)。

重要的是要理解,在 one-vs-rest 多类分类中,预测分数不能独立解释,分类器只知道如何区分可能的类。例如,如果将图像分为狗、鱼和植物三类,则大象的图像很有可能被预测为狗类,因为它是最接近的。然而,如果将狗与其他任何事物进行分类,那么对于相同的大象图像,狗的概率应该非常低。

按类别使用自定义阈值“打破”了实例的预测分数之间存在的依赖关系,它可能会导致偏差,从而以牺牲其他类别为代价使某些类别受益。

此外,我认为从逻辑上讲,零标签的可能性意味着多个标签也应该是可能的,但我不确定这是否很重要。