击打

本文介绍如何在Azure Machine Learning设计器中使用 SMOTE 组件来增加用于machine learning的数据集中未代表的事例数。 与简单地复制现有事例相比,SMOTE 更适合用于增加罕见事例数量。

你将 SMOTE 组件连接到不均衡的数据集。 许多原因可能会导致数据集不平衡。 例如目标类别在总体中很少见,或者难以收集数据。 通常,当要分析的类较少出现时,可以使用 SMOTE。

组件返回包含原始样本的数据集。 它还会根据你指定的百分比返回大量合成的少数示例。

有关 SMOTE 的详细信息

合成少数过采样技术 (SMOTE) 是一种统计技术,用于以平衡的方式增加数据集中的事例数量。 此组件的工作原理是从你作为输入提供的现有少数用例生成新的实例。 SMOTE 的此实现不会更改大多数事例的数量。

新实例不仅仅是现有少数事例的副本。 相反,该算法为每个目标类及其最近的邻域获取特征空间示例。 然后,该算法生成将目标事例的特征与其邻域特征相结合的新示例。 这种方法会增加可用于每个类的特征,使示例更一般化。

SMOTE 将整个数据集作为输入,但仅增加少数事例的百分比。 例如,假设有一个不平衡的数据集,其中只有 1% 的事例具有目标值 A(少数类),99% 的事例具有 B 值。若要生成等于原始少数事例数的两倍的综合事例,请在组件的属性中输入 200SMOTE 百分比

例子

尝试将 SMOTE 与小型数据集一起使用以查看其工作原理。 以下示例使用Azure Machine Learning设计器中提供的献血数据集。

如果将数据集添加到管道并选择“ 可视化 ”在数据集的输出上,则会看到数据集中的 748 行或事例中,570 个事例(76%)是类 0,178 个事例(24%)是类 1。 尽管此结果的不平衡程度较低,但类 1 代表已献血者,因此这些行包含要建模的特征空间。

若要增加事例数,请使用 100 的倍数设置 SMOTE 百分比 的值,如下所示:

类 0 类 1
原始数据集

(等效于 SMOTE 百分比0 )
570

76%
178

24%
748
SMOTE 百分比100 570

62%
356

38%
926
SMOTE 百分比200 570

52%
534

48%
1,104
SMOTE 百分比300 570

44%
712

56%
1,282

警告

使用 SMOTE 增加事例数不能保证更准确的模型。 尝试使用不同的百分比、不同的特征集以及不同数量的最近的邻域进行管道传输,以了解添加事例对模型的影响。

如何配置 SMOTE

  1. 将 SMOTE 组件添加到管道。 可以在“数据转换”组件下的“填充”类别中找到该组件。

  2. 连接要增强的数据集。 如果想通过仅使用特定列或排除某些列来指定用于构建新案例的特征空间,请使用 在数据集中选择列 组件。 然后,可以在使用 SMOTE 之前隔离要使用的列。

    否则,通过 SMOTE 创建新事例将基于作为输入提供的所有列。 特征列中至少有一列是数字。

  3. 请确保选中包含标签或目标类的列。 SMOTE 仅接受二进制标签。

  4. SMOTE 组件可自动标识标签列中的少数类,然后获取该少数类的所有示例。 所有列都不能有 NaN 值。

  5. 在“SMOTE 百分比”选项中,输入一个整数,该整数指示输出数据集中少数事例的目标百分比。 例如:

    • 输入 0。 SMOTE 组件返回与你作为输入提供的完全相同的数据集。 没有增加新的少数事例。 在此数据集中,类比例未更改。

    • 输入 100。 SMOTE 组件会生成新的少数案例。 它会添加与原始数据集中相同数量的少数事例。 由于 SMOTE 不会增加大多数事例的数量,因此每个类事例的比例会发生变化。

    • 输入 200。 该组件生成等于原始少数案件数的两倍的新综合事例,导致原案总数的三倍。 由于 SMOTE 不会增加多数事例的数量,因此数据集中少数事例的总体比例也会增加。

    注释

    请仅使用 100 的倍数作为 SMOTE 百分比。

  6. 使用“最近的邻域数量”选项可以确定 SMOTE 算法在构建新事例时使用的特征空间的大小。 最近的邻域是与目标事例类似的数据行(事例)。 任何两个事例之间的距离由组合所有特征的加权向量度量。

    • 通过增加最近的邻域的数量,可以从更多事例中获得特征。
    • 通过使最近的邻域数量保持在较低水平,可以使用与原始示例中的特征更相似的特征。
  7. 如果要确保在针对相同数据运行同一管道时获得相同结果,请在“随机种子”框中输入一个值。 否则,组件会在部署流水线时根据处理器时钟值生成随机种子。 随机种子的生成可能会导致运行结果略有不同。

  8. 提交管道。

    该组件的输出是一个数据集,其中包含原始行以及具有少数案例的增加行数。

技术说明

  • 发布使用 SMOTE 组件的模型时,请先从预测管道中删除 SMOTE ,然后再将其发布为 Web 服务。 SMOTE 用于在训练期间改进模型,而不是用于评分。 如果已发布的预测管道包含 SMOTE 组件,则可能会出现错误。

  • 如果在应用 SMOTE 之前清理缺失值或应用其他转换来修复数据,通常可以获得更好的结果。

  • 一些研究人员调查了 SMOTE 对高维或稀疏数据的有效性,如用于文本分类或基因组学数据集的数据。 本文很好地总结了在这种情况下应用 SMOTE 的效果和理论有效性:Blagus 和 Lusa:用于高维不平衡数据的 SMOTE

  • 如果 SMOTE 在数据集中无效,请考虑其他方法,例如:

    • 用于少数事例过采样或多数类事例欠采样的方法。
    • 使用聚类分析、装袋或自适应增强直接帮助学习器的系综技术。

后续步骤

请参阅可用的组件以Azure Machine Learning。