将数据分组到箱中
重要
对机器学习工作室(经典)的支持将于 2024 年 8 月 31 日结束。 建议在该日期之前转换到 Azure 机器学习。
从 2021 年 12 月 1 日开始,你将无法创建新的机器学习工作室(经典)资源。 在 2024 年 8 月 31 日之前,可继续使用现有的机器学习工作室(经典)资源。
ML 工作室(经典)文档即将停用,将来可能不会更新。
将数字数据装箱
类别: 缩放和减少
模块概述
本文介绍如何在 机器学习 Studio (经典) 中使用组数据到 Bins 模块,对连续数据进行分组或更改分布。
将数据分组到箱中模块支持使用多个选项将数据分箱。 可以自定义量化边界的设置方式,以及在箱中分配值的方式。例如,你能够:
- 手动键入一系列要用作箱边界的值。
- 计算枚举分数以确定每个范围的信息值,以优化预测模型中的箱。 + 使用 分位数或百分位数排名将值分配给箱。
- 还可以控制每个箱中的值数。
- 强制将值均匀分布到箱中。
有关分箱和分组的更多信息
装箱 或分组数据 (有时称为 量化) 是准备数值数据进行机器学习的重要工具,在以下情况下非常有用:
某个连续数字列包含过多的唯一值,以致无法有效建模,因此需要自动或手动将值分配到组,以创建较小的离散范围集。
例如,可以使用 数据分组到 Bin 中 生成的最小值分数来识别数据值的最佳分组,并将这些组用作模型中的特征。
将数字列替换为表示特定范围的分类值。
例如,对于用户人口统计数据,你可能想要在年龄列中通过指定自定义范围(例如 1-15、16-22、23-30 等)来对该列中的值分组。
某个数据集包含几个极端值,这些值远远超出预期的范围,并且对训练的模型造成了很大的影响。 若要缓解模型中的偏差,可以使用分位 (或等高) 方法将数据转换为统一分布。
使用此方法时,将数据分组到箱中模块将确定理想的箱位置和箱宽度,以确保在每个箱中放入大致相同数量的样本。 然后,箱中的值将转换为百分位数或映射到箱号,具体取决于你选择的归一化方法。
分箱示例
下图显示了使用分位数方法分箱之前和之后的数字值分布。 请注意,与左侧的原始数据相比,数据已分箱并转换为单位法线标度。
另一种装箱方法在 乳腺癌检测 样本中进行了演示,其中 将数据分组到 Bins 中,用于将患者分配到各种控制和测试组,以确保每个组具有相等数量的患者。
由于可以通过许多方式对数据进行分组且所有方式都可自定义,因此我们建议使用不同的方法和值进行试验。 “ 示例 ”部分包含示例试验的链接,这些试验演示如何使用不同的装箱算法。
如何配置“将数据分组到箱中”
在 Studio 中将 组数据添加到 Bins 模块, (经典) 。 可以在“缩放和缩减”下的“数据转换”类别中找到此模块。
连接包含要分箱的数字数据的数据集。 量化只能应用到包含数字数据的列。
如果数据集包含非数字列,请使用选择数据集中的列模块选择要处理的列子集。
指定分箱模式。 装箱模式确定其他参数,因此请务必先选择 装箱模式 选项! 以下分箱类型受支持:
Entropy MDL:此方法要求选择要预测的列以及要分组到箱中的列或列。然后,它会传递数据,并尝试确定最小化枚举的箱数。 换句话说,它选择多个箱,使数据列能够最好地预测目标列。 It then returns the bin number associated with each row of your data in a column named
<colname>quantized
.如果 Entropy MDL 方法找不到最初将数据装箱以进行良好预测的方法,则它将所有数据分配给统一箱。 这并不意味着列不是一个很好的预测器。 在这种情况下,可以使用其他方法查找可最大程度地减少 entropy 的箱数,并使数据成为更好的预测器。
此方法不返回实际 entropy 分数。
分位数:分位数方法根据百分位排名将值分配到箱中。 分位数也称为等高分箱。
等宽:如果使用此选项,必须指定箱的总数。数据列中的值会以一种使每个箱在开始值和结束值之间具有相同间隔的方式放入箱中。 因此,如果数据聚集在特定点附近,则一些箱可能会包含更多的值。
自定义边界:可以指定每个箱的开始值。 边界值始终是箱的下边界。 例如,假设你要将值分组到两个箱中,一个箱中的值大于 0,另一个箱中的值小于或等于 0。 在本例中,对于箱边缘,将在 以逗号分隔的箱边缘列表中键入 0。 模块的输出将是 1 和 2,表示每个行值的箱索引。
与自定义"开始"菜单和 Stop 相等宽度:此方法类似于“相等宽度”选项,但可以同时指定下限和上箱边界。
箱数:如果使用 Entropy MDL、 Quantiles 和 Equal Width 装箱模式,请使用此选项指定要创建的箱数或 分位数。
对于“要分箱的列”,请使用“列选择器”选择包含要分箱的值的列。 列必须是数字数据类型。
同一分箱规则将应用到你选择的所有适用列。 因此,如果需要使用不同的方法将某些列分箱,请对每个列集使用单独的将数据分组到箱中实例。
警告
如果选择的列属于不允许的类型,将会生成运行时错误。 模块在发现任一列的类型不被允许时,会立即返回错误。 如果收到错误,请检查所有选定的列。 该错误不会列出所有无效列。
对于“输出模式”,请指明要如何输出量化值。
Append:新建一个包含已分箱值的列并将此列追加到输入表中。
Inplace:使用数据集中的新值替换原始值。
ResultOnly:仅返回结果列。
如果选择“分位数”分箱模式,请使用“分位数归一化”选项来确定值在按分位数排序之前如何归一化。 请注意,规范化值会转换值,但不会影响箱的最终数量。有关示例,请参阅 不同规范化方法的效果。
以下归一化类型受支持:
Percent:值在 [0,100] 范围内归一化
PQuantile:值在 [0,1] 范围内归一化
QuantileIndex:值在 [1,箱数] 范围内规范化
如果选择“自定义边界”选项,请在“+ 量化边界的逗号分隔列表”文本框中,键入要用作量化边界的逗号分隔数字列表。 这些值将标记用于分箱的点。因此,如果键入一个量化边界值,则会生成两个箱;如果键入两个量化边界值,则会生成三个箱,依此类推。
必须按箱的创建顺序从低到高将值排序。
如果使用选项“等于宽度与自定义"开始"菜单和停止”,则必须指定箱的边界。
通过在 “第一个边缘位置 ”文本框中键入值来定义第一个箱的下边界。
通过在 “最后一个边缘位置 ”文本框中键入值来定义最后一个箱的下边界。
将列标记为分类:选择此选项可自动将元数据标志添加到装箱值列。 元数据标志指示应将量化列作为分类变量进行处理。
运行试验,或选择此模块,然后单击 “运行”选择。
结果
将数据分组到箱中模块将返回一个数据集,其中的每个元素已根据指定的模式分箱。
该模块还会返回“分箱转换”函数,此函数可传递到应用转换模块,以使用相同的分箱模式和参数将新的数据样本分箱。
若要查看装箱方法作为预测器的工作方式,可以单击 组数据到箱的数据集输出,并将标签列与装箱列进行比较。 如果分组到箱是预测性的,则跨选项卡矩阵中的值应集中在几个单元格中。
提示
请记住,如果对训练数据使用分箱,就必须对数据使用在测试和预测时所用的相同分箱方法。 这包括分箱方法、箱位置和箱宽度。
为确保始终使用相同的分箱方法转换数据,我们建议保存有用的数据转换,然后使用应用转换模块将这些转换应用到其他数据集。
示例
有关如何在机器学习方案中应用量化的示例,请参阅 Azure AI 库:
- 乳腺癌检测:在本示例中,箱用于使用患者 ID 字段将患者划分为平等组。
- 航班延误预测:使用分位规范化将事例排序为 10 个箱。
- Twitter 情绪分析:分数分为五个表示排名分数的箱。
技术说明
本部分包含实现详情、使用技巧和常见问题解答。
不同规范化方法的效果
如果选择了选项, 则分位数规范化将在装箱之前转换值。 因此,为规范化选择的方法对数值有很强的影响。
例如,下表说明了如何使用每个规范化方法转换望远镜数据集中的单个列中fLength
的值。 该列 fLength
是随机选择的,用于说明每个选项的输出值,并且没有正态分布。
源 (fLength) | pQuantile | QuantileIndex | 百分比 |
---|---|---|---|
28.7967 | 0.363636 | 4 | 36.363636 |
31.6036 | 0.454545 | 5 | 45.454545 |
162.052 | 0.909091 | 10 | 90.909091 |
23.8172 | 0.272727 | 3 | 27.272727 |
每个方法的装箱结果相似。
下图显示了使用默认值 10 个箱在装箱前后列中的值分布。
实现详细信息
在量化期间,通过将每个数字的值与箱边缘的值进行比较,将每个数字映射到一个箱。
例如,如果值为 1.5,并且箱边缘为 1、2 和 3,则元素将映射到 bin 数字 2。 值 0.5 将映射到下溢箱 1 (下溢箱) ,值 3.5 将映射到溢出箱) 的箱号 4 (。
如果要装箱(量化)的列是稀疏列,则在填充结果列时使用的是箱索引偏移量(分位数偏移量)。 选择偏移量后,稀疏列 0 始终会分入索引为 0 的箱中(换言之,分位数为值 0)。
稀疏列 0 会从输入列传播到输出列中。
处理密集列始终会生成箱索引最小值等于 1 的结果;也就是说,最小分位数值等于列中的最小值。 同时,处理稀疏列会产生一个结果,其最小箱索引 (最小分位数值) 。
所有 NaN 和缺失值都会从输入列传播到输出列中。 该模块返回 quantile 索引时,唯一的例外是这种情况。 在这种情况下所有 Nan 将被都提升到缺少的值。
箱索引从 1 开始。 这是分位的自然约定(第 1 个分位数、第 2 个分位数,依此类推)。 唯一的例外情况是要装箱的列为稀疏列。
预期输入
名称 | 类型 | 说明 |
---|---|---|
数据集 | 数据表 | 要分析的数据集 |
模块参数
名称 | 范围 | 类型 | 默认 | 说明 |
---|---|---|---|---|
装箱模式 | 列出 | QuantizationMode | 分位数 | 选择装箱方法 |
要装箱的列 | any | ColumnSelection | NumericAll | 选择要量化的列 |
输出模式 | any | OutputTo | 指示如何输出量化列 | |
将列标记为分类列 | any | 布尔 | 是 | 指示是否应将输出列标记为分类列 |
箱数 | >=1 | Integer | 10 | 指定所需的箱数 |
分位数规范化 | any | BinningNormalization | 选择用于规范化分位数的方法 | |
第一个边缘位置 | any | Float | 0.0 | 指定第一个箱边缘的值 |
箱宽 | any | Float | 0.5 | 指定自定义箱宽 |
最后一个边缘位置 | any | Float | 1.0 | 指定最后一个箱边缘的值 |
箱边缘的逗号分隔列表 | any | String | 键入要用作箱边缘的数字的逗号分隔列表 |
Outputs
名称 | 类型 | 说明 |
---|---|---|
量化的数据集 | 数据表 | 包含量化列的数据集 |
装箱转换 | ITransform 接口 | 向数据集应用量化的转换 |
例外
异常 | 描述 |
---|---|
错误 0003 | 如果一个或多个输入为 NULL 或为空,将出现异常。 |
错误 0004 | 如果参数小于或等于特定值,将出现异常。 |
错误 0011 | 如果传递的列集参数不适用于任何数据集列,将出现异常。 |
错误 0021 | 如果传递给模块的某些数据集的行数过少,将出现异常。 |
错误 0024 | 如果数据集不包含标签列,将出现异常。 |
错误 0020 | 如果传递给模块的某些数据集的列数过少,将出现异常。 |
错误 0038 | 如果所需的元素数目应是确切的值但并非如此,则会发生异常。 |
错误 0005 | 如果参数小于特定值,将出现异常。 |
错误 0002 | 如果无法将一个或多个参数从指定类型分析或转换为目标方法所需的类型,将出现异常。 |
错误 0019 | 如果列应该包含已排序的值,但实际没有,将出现异常。 |
错误 0039 | 如果操作失败,则会发生异常。 |
错误 0075 | 如果在量化数据集时使用无效的分箱函数,将出现异常。 |
有关特定于 Studio (经典) 模块的错误列表,请参阅机器学习错误代码。
有关 API 异常的列表,请参阅 机器学习 REST API 错误代码。