分区和采样

重要

对机器学习工作室(经典)的支持将于 2024 年 8 月 31 日结束。 建议在该日期之前转换到 Azure 机器学习

从 2021 年 12 月 1 日开始,你将无法创建新的机器学习工作室(经典)资源。 在 2024 年 8 月 31 日之前,可继续使用现有的机器学习工作室(经典)资源。

ML 工作室(经典)文档即将停用,将来可能不会更新。

基于采样创建数据集的多个分区

类别: 数据转换/采样和拆分

注意

适用于:机器学习 Studio (经典) 应用

可在 Azure 机器学习设计器中获取类似的拖放模块。

模块概述

本文介绍如何使用 机器学习 Studio (经典 ) 中的分区和示例模块对数据集执行采样,或者从数据集创建分区。

采样是机器学习中的一个重要工具,因为通过采样可以减小数据集的大小,同时使值的比率保持相同。 本模块支持在机器学习中非常重要的几个相关任务:

  • 将数据划分为多个大小相同的小节。

    可以将分区用于交叉验证,或用于将事例分配给随机组。

  • 将数据分成组,然后处理特定组中的数据。

    将事例随机分配给不同的组后,可能需要修改只与一个组关联的特征。

  • 采样。

    可以提取一定百分比的数据,应用随机采样,也可以选择一列用于均衡数据集并对其值进行分层采样。

  • 创建更小的数据集用于测试。

    如果有许多数据,你可能想要在设置试验时仅使用前 n 行,然后在生成模型时切换到使用完整数据集。 也可以使用采样创建更小的数据集,以便在开发环境中使用。

如何配置分区和示例

本模块支持用于将数据划分到多个分区或进行采样的多种方法。 请先选择方法,然后设置方法所需的其他选项。

  • 获取行数排名前

获取数据集中的前 N 行

使用此模式只能获取前 n 行。 如果要对少量行测试试验,并且不需要以任何方式均衡或采样数据,则此选项非常有用。

  1. 将" 分区和示例 "模块添加到工作室中的试验 (经典) ,并连接数据集。

  2. 分区模式或采样模式:将此选项设置为“Head”。

  3. 要选择的行数:键入要返回的行数。

    指定的行数必须为非负整数。 如果所选行数大于数据集中的行数,则返回整个数据集。

  4. 运行试验。

模块输出只包含指定行数的单个数据集。 始终从数据集的顶部开始读行。

创建数据样本

此选项支持简单随机采样或分层随机采样。 如果要创建用于测试的小型代表性样本数据集,此选项很有用。

  1. 将" 分区和示例 "模块添加到工作室中的试验 (经典) ,并连接数据集。

  2. 分区或采样模式:将 此选项设置为采样

  3. 采样率:键入介于 0 和 1 之间的值。 此值指定输出数据集应包含的行数占源数据集中行数的百分比。

    例如,如果只需要占原始数据集一半的数据,则键入“0.5”,表示采样率应为 50%。

    根据指定的比率,随机排列输入数据集中的行,并将其有选择地放入输出数据集。

  4. 用于采样的随机种子:(可选)键入要用作种子值的整数。

    如果希望每次都按相同的方式划分多个行,则此选项非常重要。 默认值为 0,表示根据系统时钟生成起始种子。 每次运行试验时,这可能会导致略有不同的结果。

  5. 采样的分层拆分:如果数据集中的行在采样之前应按某个键列均匀划分,请选择此选项。

    对于用于采样的分层键列,请选择一个单独的分层列,以供划分数据集时使用。 然后,将数据集中的行划分如下:

    1. 所有输入行均按指定分层列中的值分组(分层)。

    2. 对每个组中的行进行随机排列。

    3. 将每个组有选择地添加到输出数据集中以满足指定比例。

    有关分层采样详细信息,请参阅 技术说明 部分。

  6. 运行试验。

    使用此选项时,模块输出包含代表性采样数据的单个数据集。

    不会输出数据集的未采样部分。 但是,可以使用"应用转换"模块SQL数据集上的联接,以确定未使用哪些行。

将数据拆分到多个分区

要将数据集划分为数据子集时,请使用此选项。 要创建自定义数量的折叠以用于交叉验证,或将行拆分为多个组,此选项也很有用。

  1. 将" 分区和示例 "模块添加到工作室中的试验 (经典) ,并连接数据集。

  2. 对于分“区或采样模式”,选择“分配到折叠” 。

  3. 在分区中使用替换:如果希望将采样行放回到行池中以允许重用,请选择此选项。 因此,可以将同一行分配到多个折叠。

    如果不使用替换(默认选项),则不会将采样行放回到行池中以允许重用。 因此,只能将每行分配到一个折叠。

  4. 随机拆分:如果要将行随机分配到折叠,请选择此选项。

    如果不选择此选项,则使用轮询机制方法将行分配到折叠。

  5. 随机种子:(可选)键入要用作种子值的整数。 如果希望每次都按相同的方式划分多个行,则此选项非常重要。 否则,默认值 0 表示将使用随机起始种子。

  6. 指定分区器方法:使用以下选项指示希望数据如何分配到每个分区:

    • 平均分区:使用此选项可使每个分区中的行数相等。 若要指定输出分区的数目,请在“指定要平均拆分的折叠数”文本框中键入整数

    • 使用自定义比例进行分区:使用此选项可以用逗号分隔的列表指定每个分区的大小。

      例如,如果要创建三个分区,第一个分区包含 50% 的数据,其余两个分区各自包含 25% 的数据,请单击“用逗号分隔的比例列表”文本框,然后键入这些数字:.5, .25, .25

      所有分区大小的总和必须正好是 1。

      • 如果输入的数字加起来小于 1,则将创建一个额外的分区来容纳剩余的行。 例如,如果键入值 .2 和 .3,将创建第三个分区,用于容纳所有行的其余 50%。

      • 如果输入的数字超过 1,则运行试验时将引发错误。

  7. 分层拆分:如果希望在拆分时对行进行分层,请选择此选项,然后选择“分层列”。

    有关分层采样详细信息,请参阅 技术说明 部分。

  8. 运行试验。

    使用此选项,模块将输出多个数据集,并使用指定的规则对数据集进行分区。

使用预定义分区中的数据

如果已将数据集划分为多个分区,而现在想要依次加载每个分区以进行进一步分析或处理,可以使用此选项。

  1. 将分区 和示例 模块添加到工作室中的试验 (经典) 。

  2. 将其连接到“分区和采样”以前的实例的输出。 此实例必须使用“分配到折叠”选项才能生成一定数量的分区。

  3. 分区模式或采样模式:选择“选取折叠”。

  4. 指定要从中进行抽样的折叠:通过键入要使用的分区的索引来选择要使用的分区。 分区索引从 1 开始。 例如,如果将数据集划分为三个部分,则分区的索引分别为 1、2 和 3。

    如果键入无效的索引值,则会引发设计时错误: "错误0018: Dataset 包含无效数据。"

    除了将数据集按折叠分组,还可以将数据集分成两个组:目标折叠和其他所有内容。 为此,请键入单个折叠的索引,然后选择选项“选取所选折叠的补集”,以获取除指定折叠中数据以外的所有内容

  5. 如果使用多个分区,则必须添加“分区和采样”模块的其他实例才能处理每个分区

    例如,假设之前使用 age 将患者分区为五个折叠。 若要处理每个折叠,需要使用 分区和示例 模块的五个副本,并且在每个副本中选择不同的折叠。

    提示

    示例试验( 拆分分区和示例)演示了此方法。

  6. 运行试验。

    使用此选项,则模块输出单个数据集,它只包含分配到该折叠的行。

注意

不能直接查看折叠指定情况;此信息仅存在于元数据中。

示例

有关如何使用此模块的示例,请参阅 Azure AI 库

  • 二元分类的交叉验证:应用20% 的采样率来创建更小的随机抽样数据集。 原始人口普查数据集有超过30000行;采样的数据集大约为6500。

  • 交叉验证回归:数据随机、均匀地分配给5个折叠,无分层,结果用于交叉验证。

  • 拆分分区和示例:演示使用分区和采样的多种方法。 首先,使用 " 分配给折叠 " 选项将数据集中的行分配给三个大小相等的组之一。 然后,使用 "选取折叠" 模式添加第三个分区和示例实例,以将操作应用到数据子集

    • 在第一折 (1) 的索引中,行将随机拆分。
    • 在第二折 (2) 的索引中,行将按教育拆分。
    • 在第三个折叠 (索引为 3) ,按 age 拆分行。

技术说明

  • 分层列必须是具有离散值的分类。 如果该列尚未分类并且出现错误,请使用 " 编辑元数据 " 更改列属性。

  • 指定的阶层列不能包含连续数据:即每个单元格中具有浮点值的数值数据。 否则,模块无法处理数据并返回错误。

    原因在于,用于分层的任何列都必须具有一组有限的可能值。 如果指定的阶层列包含任何浮点值,并且该列不属于分类类型,则它可能包含无限数目的值。

  • 如果阶层列包含布尔值,并且你希望将它们解释为分类,则必须使用 编辑元数据 模块来更改元数据标签。

  • 如果阶层列包含具有太多唯一值的字符串或数值数据,则列不适合用于分层采样。

有关分层采样的详细信息

分层采样 可确保数据的子集具有所选阶层列的代表性采样。 举例来说,当你想要确保你的练习数据包含测试数据所具有的相同年龄值分布(或反之)时,此方法会很有用。 或者,你可能想要对卫生保健研究中的性别列进行分层,以确保对数据进行分区时男性和女性平均分布。 分层可确保保留选定值的比率。

您可以通过选择单个列作为 阶层列来指定数据的分隔值。

此模块要求阶层列是分类列。 如果你想要为阶层使用一个整数值列,则最好将分类类型分配给该列。 在将数据添加到机器学习 Studio (经典) 之前,可以通过数据的架构执行此操作,也可以使用编辑元数据更新列的元数据。

具有连续数据(即每个单元格中带浮点值的数字数据)的列不能用作阶层列。 如果遇到错误,可以使用 组中的数据 将值分散到不同的范围,然后使用 " 编辑元数据 " 来保证将列视为分类。

预期输入

名称 类型 说明
数据集 数据表 要拆分的数据集

模块参数

名称 范围 类型 默认 说明
分区或采样模式 列表 采样方法 采样 选择分区或采样模式
在分区中使用替换 任意 布尔 False 指示折叠是否应为非连续 (默认值-无替换) 或重叠 (true-使用替换)
随机化拆分 任意 布尔 True 指示是否随机拆分
随机种子 任意 Integer 0 为随机数生成器指定种子
指定分区器方法 列表 分区方法 均衡分区 依次选择 " 分区 ",以分区为大小相等的折叠,或分区为自 定义的比例 分区,使其分区为自定义大小的折叠
指定要均衡拆分成的折叠数 >=1 Integer 5 选择要拆分到的分区数
分层拆分 列表 True/False 类型 False 指示是否对拆分进行分层
分层键列 任意 ColumnSelection 包含分层键
逗号分隔的比例列表 任意 字符串 列出比例,用逗号分隔
为自定义折叠分配进行分层拆分 任意 True/False 类型 False 指示是否为自定义折叠分配对拆分进行分层
自定义折叠分配的分层键列 任意 ColumnSelection 为自定义折叠分配包含分层键
指定要从中采样的折叠 >=1 Integer 1 包含要采样的折叠的索引
选取所选折叠的补数 任意 布尔 False 选择指定折叠的补数
采样速率 任意 Float 0.01 选择采样率
采样的随机种子 任意 Integer 0 为采样的随机数生成器指定种子
采样的分层拆分 任意 True/False False 指示是否为采样对拆分进行分层
采样的分层键列 任意 ColumnSelection 包含采样的分层键
要选择的行数 >=0 Integer 10 选择允许传递给下一个模块的最大记录数

Outputs

名称 类型 说明
oDataset 数据表 拆分后生成的数据集

另请参阅

样本和拆分
拆分数据
编辑元数据
将数据分组到箱中