平衡机器学习数据集的基本方法是什么?

数据挖掘 机器学习 数据集
2021-09-17 10:30:11

有时我们会遇到类不平衡的数据集。例如,A 类可能有 2000 个实例,但 B 类只有 200 个。我们如何为此类数据集训练分类器?

3个回答

好吧,你只是在不平衡的数据集上训练它,这不是问题。我认为你不需要应用一些特殊的技术。

您可能想要做一些特别的事情的唯一情况是您的类是否因其性质而倾斜(如果偏度是类本身的属性,而不仅仅是您的特定数据集)。例如,如果您构建一个分类器,该分类器将在 X 射线图像中判断某人是否患有恶性肿瘤。从任务性质来看,绝大多数患者不会患上恶性肿瘤。在这种情况下,您可能需要稍微调整您的分类器算法,例如将权重引入您的 SVM 或类似的东西。

一个特殊情况是,如果您的课程非常不平衡。例如 100000 个正例和 20 个负例。在这种情况下,您将希望从分类任务转向称为“异常检测”的方法。

您可以采取其他一些方法来尝试平衡您的班级分布。

.

子样本多数类

您可以通过对多数类进行二次抽样来平衡类分布。

过采样少数类

带放回抽样可用于增加少数类的比例。

添加噪音

一个更复杂的方案是向少数类的现有实例添加高斯或其他合适的噪声,以创建更多具有代表性但多样化的实例。

SMOTE

一种比纯噪声添加更复杂的合成少数类实例的流行方法是SMOTE(Synthetic Minority Oversampling TEchnique)。这使用特征空间中的 K 成员邻域来估算新实例。

WEKA 对此有一个过滤器。

尽管有一些证据表明这种技术在这里对高维数据并没有太大的好处。

常规选项:

  1. 通过生成代表多个功能的新标签将您的功能分组

  2. 使用降维,例如 PCA、Autoencoder其中很多都是在 Sklearn 中实现的,缺点是一旦将特征转换为纯数学表示,就会变得难以分析,这些表示可能具有算法“学习”的关系

算法相关选项:

  1. 归一化,在神经网络中定义了特定层中每个特征对最终分类、回归等的贡献

  2. 辍学,这类似于我的评论,告诉你的模型随机忽略你的神经网络层之间的一定百分比的输入

观察:我为最后两个选项描述了神经网络,但你也可以将它们应用到一些不同的算法中,举个例子,我研究了很多树,我发现你可以将它应用到决策树、随机森林和在极端梯度增强版本的树中,如 Ada Boost、Cat Boost 等

一般来说,我会看到数据信息,如果您使用的是 pandas infodescribeplot(适用于数据集的每个特征)isnull().values.any()、 等;主要是视觉情节,以查看其平衡。在一些问题中,我对这些了解不多,这对后来的决策起到了巨大的作用!