SMOTE
本文介绍如何使用 Azure 机器学习设计器中的 SMOTE 组件来增加用于机器学习的数据集中的代表性不足的案例数量。 与简单地复制现有事例相比,SMOTE 更适合用于增加罕见事例数量。
你将 SMOTE 组件连接到不均衡的数据集。 数据集不平衡的原因可能有很多。 例如目标类别在总体中很少见,或者难以收集数据。 通常,当要分析的类较少出现时,可以使用 SMOTE。
组件返回包含原始样本的数据集。 它还会根据你指定的百分比返回大量合成的少数示例。
合成少数过采样技术 (SMOTE) 是一种统计技术,用于以平衡的方式增加数据集中的事例数量。 此组件的工作原理是从你作为输入提供的现有少数用例生成新的实例。 SMOTE 的实现不会更改多数事例的数量。
新实例不仅是现有少数事例的副本。 相反,该算法为每个目标类及其最近的邻域获取特征空间示例。 然后,该算法生成将目标事例的特征与其邻域特征相结合的新示例。 这种方法会增加可用于每个类的特征,使示例更一般化。
SMOTE 将整个数据集作为输入,但仅增加少数事例的百分比。 例如,假设你有一个不均衡数据集,其中只有 1% 的案例具有目标值 A(少数类别),而 99% 的案例具有值 B。要将少数案例的百分比增加到先前百分比的两倍,你将在组件的属性中为 SMOTE 百分比输入 200。
建议尝试对小型数据集使用 SMOTE 以了解其工作原理。 下面的示例使用 Azure 机器学习设计器中提供的献血数据集。
如果将数据集添加到管道并选择对数据集的输出进行“可视化”,将可以看到,在数据集的 748 行(或者说 748 个事例)中,有 570 个事例 (76%) 属于类 0,而有 178 个事例 (24%) 属于类 1。 尽管此结果的不平衡程度较低,但类 1 代表已献血者,因此这些行包含要建模的特征空间。
要增加事例数量,可以使用 100 的倍数来设置 SMOTE 百分比的值,如下所示:
类 0 | 类 1 | total | |
---|---|---|---|
原始数据集 (等效于 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 组件添加到管道。 可以在“数据转换”组件下的“填充”类别中找到该组件。
连接要增强的数据集。 如果想通过仅使用特定列或排除某些列来指定用于构建新案例的特征空间,请使用 在数据集中选择列 组件。 然后,可以在使用 SMOTE 之前隔离要使用的列。
否则,通过 SMOTE 创建新事例将基于作为输入提供的所有列。 特征列中至少有一列是数字。
请确保选中包含标签或目标类的列。 SMOTE 仅接受二进制标签。
SMOTE 组件可自动标识标签列中的少数类,然后获取该少数类的所有示例。 所有列都不能有 NaN 值。
在“SMOTE 百分比”选项中,输入一个整数,该整数指示输出数据集中少数事例的目标百分比。 例如:
输入 0。 SMOTE 组件返回与你作为输入提供的完全相同的数据集。 没有增加新的少数事例。 在此数据集中,类比例未更改。
输入 100。 SMOTE 组件会生成新的少数案例。 它会添加与原始数据集中相同数量的少数事例。 由于 SMOTE 不会增加多数事例的数量,因此每个类的事例所占比例也会发生变化。
输入 200。 与原始数据集相比,该组件使少数案例的百分比翻倍。 这不会使少数事例的数量变为原来的两倍。 而会增加数据集的大小,并使多数事例的数量保持不变。 少数事例的数量会增加,直到达到所需的百分比值。
备注
请仅使用 100 的倍数作为 SMOTE 百分比。
使用“最近的邻域数量”选项可以确定 SMOTE 算法在构建新事例时使用的特征空间的大小。 最近的邻域是与目标事例类似的数据行(事例)。 任何两个事例之间的距离由组合所有特征的加权向量度量。
- 通过增加最近的邻域的数量,可以从更多事例中获得特征。
- 通过使最近的邻域数量保持在较低水平,可以使用与原始示例中的特征更相似的特征。
如果要确保在针对相同数据运行同一管道时获得相同结果,请在“随机种子”框中输入一个值。 否则,组件会在部署流水线时根据处理器时钟值生成随机种子。 随机种子的生成可能会导致运行结果略有不同。
提交管道。
该组件的输出是一个数据集,其中包含原始行以及具有少数案例的增加行数。
发布使用 SMOTE 组件的模型时,请在作为 Web 服务发布模型之前,从预测管道中删除 SMOTE。 这是因为 SMOTE 用于在训练期间改进模型,而不用于评分。 如果已发布的预测管道包含 SMOTE 组件,则可能会出现错误。
如果在应用 SMOTE 之前清理缺失值或应用其他转换来修复数据,通常可以获得更好的结果。
一些研究人员调查了 SMOTE 对高维或稀疏数据的有效性,如用于文本分类或基因组学数据集的数据。 本文很好地总结了在这种情况下应用 SMOTE 的效果和理论有效性:Blagus 和 Lusa:用于高维不平衡数据的 SMOTE。
如果 SMOTE 在数据集中无效,可以考虑使用的其他方法包括:
- 用于少数事例过采样或多数类事例欠采样的方法。
- 使用聚类分析、装袋或自适应增强直接帮助学习器的系综技术。
请参阅 Azure 机器学习可用的组件集。