不平衡的多类:随着更多数据的进入,分布可能会发生变化

数据挖掘 机器学习 Python scikit-学习 多类分类 阶级失衡
2022-02-26 04:18:05

我目前正在研究测试日志数据的多类分类问题。

基本上,我保存了测试执行的上下文数据,并希望自动分析失败的测试。我的两个目标是负责错误的页面(对应于工作团队)和错误类型。

因此,对于这件事,我在时间t获取数据并在本地对其进行处理,以获得可能的最佳结果。

我训练了几个模型,通过网格搜索的超参数优化对它们进行了优化,得到了很好的结果。

目标页面的 f1_scores 约为 90+%,目标类型约为80+%

这些结果看起来不错,所以我正在研究集成方法,然后从我的不同模型的组合中获得更好的结果。

在下图中,您可以看到目标页面的不同模型的 f1 分数和方差。 目标页面上分类器的 f1 分数比较

但是当我正在研究如何进行集成时,我想到了获取最新的测试数据(请记住,我从t开始就使用相同的数据)。

我从只有2162个样本变成了4367个样本,所以数据量增加了一倍多。

这使我的数据分布与以前不同(在下图中,我们可以看到目标页面的每个类的值数量)。

之前 - 课程页面的训练数据上的课程分布

上面,我们可以看到有 11 个高度不平衡的类。

之后 - 课程页面的训练数据上的课程分布

在第二个图上,我们可以看到我们现在有 14 个类,也很不平衡。

(与新数据的差异也适用于目标类型)。这导致我的模型损失了 f1_score 的 6% 到 10%。

所以,我的问题如下:

  • 在这种情况下,我该如何处理数据,以便模型能够很好地处理新数据,即使分布可能发生变化?我是否需要检查分数的演变,当分数过低时,重新进行参数优化?
  • 我现在正在独立处理每个目标。我应该在两个目标之间尝试多标签吗?如果是这样,您对算法或解决方法有什么建议吗?
  • 任何关于如何改进工作的建议,也许可以尝试不同的模型或集成方法,我们将不胜感激☺

感谢您阅读这篇长文!

1个回答

训练后数据分布可以通过多种方式改变。

如果有新类别,则需要重新训练模型以处理新类别。

如果类别的相对频率发生变化,则不会影响大多数模型。大多数模型基于特征学习决策边界。如果模型基于类频率的先验优先级,则必须重新训练模型以反映更新的先验频率。

数据可能发生变化的另一种方式是用于预测特定类别的特征是否发生变化。如果特征发生变化,模型将被重新训练以学习更新的特征权重。