SMOTE
重要
对机器学习工作室(经典)的支持将于 2024 年 8 月 31 日结束。 建议在该日期之前转换到 Azure 机器学习。
从 2021 年 12 月 1 日开始,你将无法创建新的机器学习工作室(经典)资源。 在 2024 年 8 月 31 日之前,可继续使用现有的机器学习工作室(经典)资源。
ML 工作室(经典)文档即将停用,将来可能不会更新。
使用合成少数过采样在数据集中增加低发生率示例的数量
类别: 数据转换/操作
模块概述
本文介绍如何使用机器学习 Studio (经典) 中的SMOTE模块,增加用于机器学习的数据集中的 underepresented 事例数。 与简单地复制现有事例相比,SMOTE 更适合用于增加罕见事例数量。
将 SMOTE 模块连接到 不均衡的数据集。 数据集可能不均衡的原因有很多:在总体中可能非常罕见的类别,或者数据可能只是难以收集。 通常情况下,当要分析的 类 处于未按下时,将使用 SMOTE。
模块返回的数据集包含原始样本以及补充数量的合成少数样本,具体视你指定的百分比而定。
有关 SMOTE 的详细信息
SMOTE 代表 综合少数过度抽样技术。 这是一种统计方法,用于以平衡方式增加你的数据集中的用例数。 该模块的工作原理是从你作为输入提供的现有少数事例生成新的实例。 SMOTE 的实现不会更改多数事例的数量。
新实例不只是现有少数事例的副本;相反,该算法将为每个目标类及其最近的相邻项的 功能空间 采样,并生成新的示例,这些示例将目标用例的功能与它的邻居的功能组合在一起。 这种方法会增加可用于每个类的特征,使示例更一般化。
SMOTE 将整个数据集作为输入,但仅增加少数事例的百分比。 例如,假设你有一个不均衡数据集,其中只有1% 的事例的目标值为 A (少数类) ,99% 的事例的值为 B。若要将少数事例的百分比增加到前面的百分比两倍,请在模块的属性中输入200作为 SMOTE 百分比 。
示例
建议你尝试对小型数据集使用 SMOTE 以查看它的工作原理。 以下示例使用机器学习 Studio (经典) 中可用的血糖捐赠数据集。
如果将数据集添加到实验,并在数据集的输出中单击 " 可视化 ",则可以看到,对于数据集中的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% |
1104 |
SMOTE 百分比 = 300 | 570 44% |
712 56% |
1282 |
警告
使用 SMOTE 增加用例数不保证生成更准确的模型。 应尝试试验不同的百分比、不同的特征集和不同数量的最近近邻,以查看添加用例如何影响你的模型。
如何配置 SMOTE
将 SMOTE 模块添加到试验中。 您可以在 "数据转换" 模块下的 "操作" 类别中找到该模块。
连接要提升的数据集。 如果要为生成新事例指定特征空间(只使用特定列或排除某些情况),请使用 " 选择数据集中的列 " 模块,在使用 SMOTE之前隔离要使用的列。
否则,使用 SMOTE 创建新事例基于你作为输入提供的 所有 列。
确保包含标签或目标类的列被标记为这样。
如果没有标签列,请使用 "编辑元数据" 模块选择包含类标签的列,然后从 "字段" 下拉列表中选择 "标签"。
SMOTE模块自动标识标签列中的少数类,然后获取该少数类的所有示例。
在 " SMOTE 百分比 " 选项中,键入一个整数,该整数指示输出数据集中的少数事例的目标百分比。 例如:
键入 0 (% ) 。 SMOTE 模块返回的数据集与你作为输入提供的数据集完全相同,不添加任何新的少数情况。 在此数据集中,类比例未更改。
键入 100 (% ) 。 SMOTE 模块会生成新的少数情况,并添加与原始数据集中相同数量的少数事例。 由于 SMOTE 不会增加多数情况,因此,每个类的事例比例现在已更改。
键入 200 (% ) 。 与原始数据集相比,该模块会将少数事例的百分比翻倍。 这不会使少数事例的数量变为原来的两倍。 相反,数据集的大小会以这种方式增加,这种情况下,多数情况下的数量会保持不变,而少数情况下会增加少数情况,直到它与所需的百分比值匹配。
注意
请仅使用 100 的倍数作为 SMOTE 百分比。
使用 最接近的邻居 选项来确定 SMOTE 算法在构建新用例时使用的特征空间大小。 “最近的邻域”是一行非常类似于某个目标用例的数据(用例)。 任何两个事例之间的距离由组合所有特征的加权向量度量。
- 通过增加最近的邻域的数量,可以从更多事例中获得特征。
- 通过使最近的邻域数量保持在较低水平,可以使用与原始示例中的特征更相似的特征。
如果要使用相同的数据确保同一试验运行相同的结果,请在 " 随机种子 " 文本框中键入值。 否则,在部署实验时,该模块将基于处理器时钟值生成随机种子,这可能会导致运行的结果略有不同。
运行试验。
模块的输出是一个数据集,其中包含原始行以及包含少数情况的一些已添加行。
提示
若要确定添加了哪些新行,可以使用Apply SQL 转换或联接数据模块。
技术说明
当发布使用 SMOTE 模块的模型时,请从预测实验中删除 SMOTE ,然后将其发布为 web 服务。 原因在于,SMOTE 旨在改进定型期间的模型,而不是用于评分。 如果已发布的预测实验包含 SMOTE 模块,则可能会出现错误。
如果在应用 SMOTE 之前应用缺少的值清理或其他转换来修复数据,则通常可以获得更好的结果。
一些研究人员调查了 SMOTE 对三维或稀疏数据的有效性,如在文本分类或基因组学数据集中使用的数据。 在此类情况下,本文提供了应用 SMOTE 的效果和理论有效性的很好摘要: Blagus 和 Lusa: SMOTE 适用于三维类-不均衡数据
如果 SMOTE 在您的数据集中无效,则您可能会考虑的其他方法包括过度抽样少数事例或 undersampling 多数情况的各种方法,以及通过使用聚类分析、学习器或自适应提升来帮助装袋的系综技术。
预期输入
名称 | 类型 | 说明 |
---|---|---|
示例 | 数据表 | 样本数据集 |
模块参数
名称 | 范围 | 类型 | 默认 | 说明 |
---|---|---|---|---|
SMOTE 百分数 | >=0 | Integer | 100 | 100 的倍数的过采样数量。 |
最近邻居数量 | >=1 | Integer | 1 | 要通过其描述新用例的功能的最近邻域数 |
随机种子 | 任意 | Integer | 0 | 随机数生成器的种子 |
输出
名称 | 类型 | 说明 |
---|---|---|
表 | 数据表 | 包含原始示例以及额外数量的合成少数类示例的 数据表 。 新样本数为 (smotePercent/100) * T,其中,T 为少数类样本数。 |