剪切值
重要
对机器学习工作室(经典)的支持将于 2024 年 8 月 31 日结束。 建议在该日期之前转换到 Azure 机器学习。
从 2021 年 12 月 1 日开始,你将无法创建新的机器学习工作室(经典)资源。 在 2024 年 8 月 31 日之前,可继续使用现有的机器学习工作室(经典)资源。
ML 工作室(经典)文档即将停用,将来可能不会更新。
检测离群值并剪切或替换其值
类别: 数据转换/缩放和缩减
模块概述
本文介绍如何使用机器学习 Studio 中的 "剪裁值" 模块 (经典) ,确定并有选择性地替换高于或低于指定阈值的数据值。 当您想要删除离群值或将其替换为平均值、常量或其他替代值时,这非常有用。
将模块连接到包含要剪切的数字的数据集,选择要使用的列,然后设置阈值或值范围以及替换方法。 该模块可以只输出结果,也可以输出附加到原始数据集的更改值。
如何配置“剪切值”
在开始之前,请确定要剪切的列以及要使用的方法。 建议先对一小部分数据测试任何剪切方法。
模块会对选中的所有列应用相同的条件和替换方法。 因此,应务必排除不打算更改的列。
如果需要对某些列应用剪切方法或不同的条件,则需要为每组类似的列使用新的剪切值实例。
将 " 剪辑值 " 模块添加到实验,并将其连接到要修改的数据集。 可以在“扩大和缩小”类别中的“数据转换”下找到此模块。
在“列列表”中,使用“列选择器”选择要应用剪切值的列。
对于“阈值集”,从下拉列表中选择以下选项之一。 这些选项确定如何为可接受的值以及必须剪切的值设置上限和下限。
ClipPeaks:如果按峰值对值进行剪切,则仅指定上限值。 将替换或删除大于该边界值的值。
ClipSubpeaks:按子峰值对值进行剪裁时,仅指定一个下限。 小于该边界值的值将被替换或删除。
ClipPeaksAndSubpeaks:按峰值和二次峰值来剪辑值时,可以同时指定上边界和下边界。 超出该范围的值将被替换或删除。 不会更改与限值匹配的值。
根据在上一步中所做的选择,可以设置以下阈值:
- 阈值下限:仅当选择了 ClipSubPeaks 时显示
- 阈值上限:仅当选择了 ClipPeaks 时显示
- 阈值:仅当选择了 ClipPeaksAndSubPeaks 时显示
对于每种阈值类型,选择“常数”或“百分位数”。
如果选择“常数”,请在文本框中键入最大值或最小值。 例如,假设已知值 999 用作占位符值。 您可以选择 " 常数 " 作为上限阈值,然后在 " 阈值上限" 中键入 "999"。
如果选择“百分位数”,会将列值限制到一个百分比范围内。
例如,只保留 10-80 百分比范围内的值,并替换所有其他值。 选择 " 百分位",然后为 " 阈值下限" 键入10,为 "阈值阈值" 键入 "80"。
可参阅有关百分位数的部分,查看有关如何使用百分位数范围的一些示例。
定义替换值。
与刚刚指定的边界完全匹配的数字被视为位于允许的值范围内,因此不会被替换或删除。 指定范围之外的所有数字都将被替换为替换值。
- 峰值替换值:定义用于替换所有大于指定阈值的列值的值。
- 子峰值替换值:定义用于替换所有小于指定阈值的列值的值。
- 如果使用 ClipPeaksAndSubpeaks 选项,可以为剪切上限值和下限值分别指定替换值。
支持以下替换值:
阈值:将剪切值替换为指定的阈值。
平均值:将剪切值替换为列值的平均值。 在对值进行剪切之前计算平均值。
中值:将剪切值替换为列值的中值。 在对值进行剪切之前计算中值。
缺失值。 将剪切值替换为缺失(空)值。
添加指示器列:如果需要生成一个新列来指示是否向该行中的数据应用了指定的剪切操作,应选择此选项。 在测试一组新的剪辑和替换值时,此选项特别有用。
覆盖标志:指示希望如何生成新值。 默认情况下,剪切值会构建一个新列,其中峰值已剪切为所需阈值。 新值会覆盖原始列。
若想保留原始列并添加含剪切值的新列,请取消选择此选项。
运行试验。
右键单击“剪辑值”模块的输出,并选择“可视化”来查看这些值,确保剪辑操作按预期执行。
示例
若要查看如何在机器学习试验中使用此模块,请参阅 Azure AI 库:
- 林激发离群值:数据科学中来自 EdX couse 的此示例演示了使用林激发示例数据集的剪辑方法。
使用百分位数进行剪辑
若要理解按百分位数剪切的原理,可以思考一个包含 10 行的数据集,其中每一行分别包含数值 1-10 中的一个值。
如果使用百分位数作为阈值上限,则在第 90 个百分位数的值处,数据集中 90% 的值必须小于该值。
如果使用百分位数作为阈值下限,则在第 10 个百分位数的值处,数据集中 10% 的值必须小于该值。
对于“阈值集”,选择 ClipPeaksAndSubPeaks。
对于“阈值上限”,选择“百分位数”,在“百分位数”中,键入 90。
对于“替代值上限值”,选择“缺失值”。
对于“阈值下限”,选择“百分位数”,在“百分位数”中,键入 10。
对于“替代值下限值”,选择“缺失值”。
取消选择选项“覆盖标志”,然后选择选项“添加指示器列”。
现在请尝试使用 60 作为上限百分比阈值和 30 作为该百分比的阈值下限,做同样试验,作为替换值中使用的阈值。 下表对以下两种结果进行了比较:
将替换为缺少;阈值上限 = 90;低于阈值下限 = 10
将替换为阈值;上部的百分位数 = 60;下百分位数 = 30
原始数据 | 替换为缺失值 | 替换为阈值 |
---|---|---|
1 2 3 4 5 6 7 8 9 10 |
TRUE TRUE 3, FALSE 4, FALSE 5, FALSE 6, FALSE 7, FALSE 8, FALSE 9, FALSE TRUE |
4, TRUE 4, TRUE 4, TRUE 4, TRUE 5, FALSE 6, FALSE 7, TRUE 7, TRUE 7, TRUE 7, TRUE |
技术说明
只能对 包含数字或 日期/时间值的列使用剪辑值。
如果包括的列带有文本或分类数据,则将跳过这些列。
计算列的平均值或中间值,将忽略缺失值。
“裁剪值”不支持顺序数据。
将缺失值传播到输出数据集时,不会更改这些值。 指示裁剪值的列始终为缺失值包含 FALSE。
预期输入
名称 | 类型 | 说明 |
---|---|---|
数据集 | 数据表 | 输入数据集 |
模块参数
名称 | 范围 | 类型 | 默认 | 说明 |
---|---|---|---|---|
添加指示器列 | TRUE/FALSE | 布尔 | FALSE | 是否添加用于剪辑值的指示器已完成 |
阈值下限的常量值 | any | Float | -1 | 要剪裁子元素的值 |
阈值上限的常量值 | any | Float | 1 | 将剪切峰值的值 |
阈值下限的常量值 | any | Float | -1 | 以下值,其子元素被剪裁 |
阈值上限的常量值 | >=1 | Float | 1 | 值,超过该值时将剪切峰值 |
列的列表 | ColumnSelection | 要剪辑的列列表 | ||
替换值下限 | 阈值 平均值 中值 Missing |
SubstituteValues | 阈值 | 用于剪辑子元素的值 |
阈值下限 | 返回的常量 百分位数 |
阈值模式 | 返回的常量 | 以下值,子元素将剪辑为模式 |
覆盖标志 | TRUE/FALSE | 布尔 | TRUE | 剪切的数据列 () 必须覆盖输入数据列 () |
阈值下限的百分位数字 | [1;99] | Integer | 1 | 要剪切子项的百分位数 |
阈值上限的百分位数字 | [1;99] | Integer | 99 | 百分位数,超过该百分位数时将剪切峰值 |
阈值下限的百分位数字 | [1; 99] | Integer | 1 | Subpeaks 被剪切的百分位数 |
阈值上限的百分位数字 | [1; 99] | Integer | 99 | 超出峰值的百分比数字 |
阈值集 | ClipPeaks ClipSubPeaks ClipPeaksAndSubPeaks |
阈值集 | ClipPeaks | 指定要使用的阈值类型 |
峰值的替换值 | 阈值 平均值 中值 Missing |
SubstituteValues | 阈值 | 在剪辑高峰期间使用的值 |
子峰值的替换值 | 阈值 平均值 中值 Missing |
SubstituteValues | 阈值 | 在剪切 subpeaks 期间使用的值 |
阈值 | 返回的常量 百分位数 |
阈值模式 | 返回的常量 | 其上方和下方的值将会被剪裁模式 |
替换值上限 | 阈值 平均值 中值 Missing |
阈值 | 阈值 | 用于剪辑峰值的值 |
阈值上限 | 返回的常量 百分位数 |
阈值模式 | 返回的常量 | 其上的峰值将为修剪模式的值 |
Outputs
名称 | 类型 | 说明 |
---|---|---|
结果数据集 | 数据表 | 包含裁剪列的数据集 |
例外
异常 | 描述 |
---|---|
错误 0011 | 如果传递的列集参数不适用于任何数据集列,将出现异常。 |
错误 0017 | 如果一个或多个指定列具有当前模块不支持的类型,则会发生异常。 |
有关特定于 Studio (经典) 模块的错误列表,请参阅机器学习错误代码。
有关 API 异常的列表,请参阅机器学习 REST API 错误代码。