我应该选择“平衡”数据集还是“代表性”数据集?

数据挖掘 机器学习 数据集 阶级失衡
2021-10-05 20:27:18

我的“机器学习”任务是将良性互联网流量与恶意流量分开。在现实世界的场景中,大多数(比如 90% 或更多)互联网流量是良性的。因此,我觉得我也应该选择类似的数据设置来训练我的模型。但是我遇到了一两篇研究论文(在我的工作领域),它们使用“类平衡”数据方法来训练模型,这意味着良性和恶意流量的实例数量相等。

一般来说,如果我正在构建机器学习模型,我应该选择代表现实世界问题的数据集,还是更适合构建模型的平衡数据集(因为某些分类器在类不平衡时表现不佳,或者由于我不知道的其他原因)?

有人可以更清楚地说明这两种选择的利弊以及如何决定选择哪一种吗?

4个回答

我会说答案取决于您的用例。根据我的经验:

  • 如果您正在尝试建立一个有代表性的模型——一个描述数据而不是预测的模型——那么我建议使用数据的代表性样本。
  • 如果你想建立一个预测模型,特别是一个通过 AUC 或等级排序表现良好的模型,并计划使用基本的 ML 框架(即决策树、SVM、朴素贝叶斯等),那么我建议你提供构建一个平衡的数据集。许多关于类不平衡的文献发现,随机欠采样(将多数类下采样到少数类的大小)可以推动性能提升。
  • 如果您正在构建一个预测模型,但使用的是更高级的框架(即,通过包装器确定采样参数的东西,或者对采样到类等价的装袋框架的修改),那么我建议再次提供代表性样本并让该算法负责平衡训练数据。

我认为这总是取决于场景。使用有代表性的数据集并不总是解决方案。假设你的训练集有 1000 个负例和 20 个正例。如果不对分类器进行任何修改,您的算法将倾向于将所有新示例分类为负例。在某些情况下,这是可以的,但在许多情况下,缺少正例的成本很高,因此您必须找到解决方案。

在这种情况下,您可以使用成本敏感的机器学习算法。例如在医疗诊断数据分析的情况下。

总结:分类错误没有相同的成本!

总有一种解决方案可以尝试这两种方法并保持最大化预期性能的方法。

在您的情况下,我假设您希望以一些误报为代价来最小化误报,因此您希望将分类器偏向强负先验,并通过减少训练集中负例的数量来解决不平衡问题。

然后在完整的、不平衡的数据集上计算精度/召回率、灵敏度/特异性或任何适合您的标准,以确保您在基于缩减数据构建模型时没有忽略真实数据中存在的重要模式。

将操作和培训场景分开。

操作场景是您的分类器将被测量的场景。这是你应该表现良好的地方。使用应具有代​​表此场景的数据集。

训练场景是您为构建在操作场景中表现良好的分类器所做的任何事情。

很多时候,两种场景中的数据集具有相同的性质,因此无需区分它们。例如,您有一些在线商店,因此您可以使用它来训练过去的使用情况,以便在未来的使用中表现良好。但是,在训练时,您可以使用与代表操作场景的数据集不同的数据集。实际上,如果你睡觉,梦想一个分类器,在你的操作场景中验证它(这一步应该在醒来后完成),你和走通常的机器学习路径一样好。

当数据集不平衡时,操作和训练场景之间的区别变得很重要。大多数算法在这样的数据集上表现不佳。

所以,不要犹豫使用两个数据集 - 您可以使用平衡的数据集进行训练。完成后,验证操作数据集的分类器。