XGBoost 偏向少数族裔

数据挖掘 机器学习 Python xgboost 过拟合 分类器
2021-10-04 23:17:25

我有一个包含 85k 正标签和 53k 负标签的数据集。对于这个用例,我试图将我的努力最大化到负类(准确识别真负,并尽量减少假负)。

目前,我能够将 xgboost 分类器训练到 71% 的准确率,当与测试集对比时,我的混淆矩阵看起来像这样

[ 3890 | 8887 ]
[  844 | 20044]

同样对于这项任务,我真的很想提高我的回忆并尽量减少误报。然而,即使在模型的当前状态下,如果我尝试提交 43k 条新记录进行预测(结果未知),我的模型预测所有 43k 条记录都不合规。

鉴于此信息,我的两个问题如下:

  1. 这种现象是多么的不规律。我认为向多数阶级倾斜是可能的,但不是少数。
  2. 是否有任何“最佳实践”可以用来降低我的模型的攻击性?它不仅预测所有声明都是否定的 (0),而且它具有很强的信心(最小“发生概率”高于 90%)。同样,我的火车组中只有不到 40% 的记录属于少数类,所以我不明白为什么它会如此严重地倾斜。

谢谢

1个回答

首先,您的混淆矩阵对我来说看起来很正常。如下图,大部分是正类,模型更倾向于将大部分负类预测为正类,这在不平衡类中很常见。您的模型将 8887 个负例预测为正例。

True   0 [ 3890 | 8887 ]
Labels 1 [  844 | 20044]
            0       1   
         predicted labels

您的班级不平衡,因此模型会进行拟合/预测以支持多数班级。

要克服此问题,您必须执行过采样/欠采样以消除由不平衡类引起的可能问题。在这方面,您可以使用不平衡学习库。

所以回答你的问题:

A1:您错误地阅读了混淆矩阵。该模型正在向多数阶层倾斜。

A2:您必须平衡您的数据。不要忘记仅对您的训练集执行过采样/欠采样。此外,根据您的需要,您可能需要使用精确度或召回率,但不仅仅是准确度;例如,如果一个类很重要,并且减少误报或减少误报是您的目标。