Xgboost 多类预测性能优于其他类

数据挖掘 nlp xgboost 预言 表现
2022-02-13 21:06:12

我有一个 NLP 任务,我正在使用 xgboost(R 实现)来处理。

在描述我的怀疑之前,我会给你一些背景:

我有一个文档语料库,我使用术语 x 术语矩阵聚类方法进行了主题发现。对于每个文档,我得到一个使用文档中的术语计算的主题分数(带有 TfIdf 分数)。然后对于每个文档,我选择得分最高的主题。

接下来的步骤是创建一个模型,给定术语 x 文档得分矩阵和每个文档的最佳主题,预测最佳主题。

我尝试了两种不同的方法:

  • 多类模型,其中一个主题与每个文档相关联;
  • 一对一的模型系列,每个主题一个,其中每个文档都被标记为属于或不属于某个主题。

以下是使用 AUC 的两种方法的结果:

    i                 topic    single     multi
1   1             Topic.nv1 0.9564445 0.9880821
2   2  Topic.nv10_Topic.wv9 0.9848492 0.9969546
3   3            Topic.nv11 0.9174293 0.9741100
4   4 Topic.nv12_Topic.wv11 0.9874073 0.9967725
5   5 Topic.nv13_Topic.wv10 0.9509909 0.9916768
6   6 Topic.nv14_Topic.wv12 0.9864622 0.9959161
7   7            Topic.nv15 0.7333333 0.9333333
8   8   Topic.nv2_Topic.wv3 0.9590279 0.9877953
9   9   Topic.nv3_Topic.wv5 0.9448966 0.9879057
10 10   Topic.nv4_Topic.wv2 0.9521490 0.9908656
11 11   Topic.nv5_Topic.wv6 0.9761665 0.9946294
12 12             Topic.nv6 0.9439377 0.9889028
13 13   Topic.nv7_Topic.wv4 0.9656248 0.9926163
14 14             Topic.nv8 0.9673726 0.9944970
15 15   Topic.nv9_Topic.wv8 0.9716538 0.9929586
16 16             Topic.wv1 0.9610704 0.9925414
17 17             Topic.wv7 0.9765398 0.9904255

可以看出,多类方法系统地优于其他方法。注意:这些是训练集的表现。

这有明确的理论原因吗?

1个回答

XGBoost 中的多类模型由n_classes单独的森林组成,每个森林对应一个一对多二元问题。在每次迭代中,都会向每个森林添加一棵额外的树。但它实际上并不是一个单对多的方法(正如我在这个答案的第一个版本中所想的那样),因为这些树的构建是为了最小化单个损失函数,即 softmax 概率的交叉熵。 https://discuss.xgboost.ai/t/multiclassification-training-process/29
https://github.com/dmlc/xgboost/issues/806
https://github.com/dmlc/xgboost/issues/3655

一般来说,one-vs-rest 模型非常擅长识别单个类,而多类模型必须平衡所有这些模型的性能。更具体地说,我认为 softmax 可能是您所显示的现象的原因。 (我还在考虑,但我想我现在应该发布上面的内容。)

假设您的一个文档很可能属于两个主题之一:森林给出的概率分数是 0.9、0.85,然后在所有其余部分中 <0.1。在您的主题 1 模型中,您相当自信地判断该文档属于主题 1(得分为 0.9)。但是在多类合奏中,你看到的事情更加不确定;也许模型应用了softmax,所以主题1的概率只有~0.5。

更极端的是,假设单个主题模型得分均为 0.9。现在,多类集成应用 softmax 并为每个主题产生相等的 1/17 概率!

在另一个方向,假设您的一个文档被判断为不太可能适合任何主题:所有单个主题模型的概率分数都是 0.01。在多类合奏中,它被放大到 1/17(好吧,17 个主题使它更难卖)。


Hrm,除了获得 0.9 和 0.85 的可能性有多大,因为这两个主题之一的训练样本将被另一个模型推向 0...?尤其是当你的分数相当高的时候,所以模型没有很大的盲点。
(这部分仍然会导致正确理解 XGBoost 如何工作的问题;softmax 概率的对数损失仍然会影响对属于两个不同类别的信心......)