构建计数转换
重要
对机器学习工作室(经典)的支持将于 2024 年 8 月 31 日结束。 建议在该日期之前转换到 Azure 机器学习。
从 2021 年 12 月 1 日开始,你将无法创建新的机器学习工作室(经典)资源。 在 2024 年 8 月 31 日之前,可继续使用现有的机器学习工作室(经典)资源。
ML 工作室(经典)文档即将停用,将来可能不会更新。
创建将计数表转换为功能的转换,以便您可以将转换应用于多个数据集
Category:包含计数的 Learning
模块概述
本文介绍如何使用机器学习 Studio (经典) 中的 "生成计数转换" 模块来分析定型数据。 在此数据中,模块生成一个 计数表 以及一组可在预测模型中使用的 基于计数的特征 。
给定标签列后,计数表包含所有特征列的联合分布。 此类统计信息可用于确定哪些列的信息值最多。 基于计数的特征化 很有用,因为此类功能比原始定型数据更紧凑,但会捕获所有最有用的信息。 您可以使用模块参数自定义如何将计数转换为一组新的基于计数的特征。
生成计数并将其转换为特征后,可以将该流程保存为转换,以便在相关数据上重复使用。 你还可以修改一组功能,而无需生成新的计数集,或将计数和功能与另一组计数和功能合并在一起。
在以下情况下,重新使用和重新应用基于计数的功能非常有用:
- 新数据将可用于改进数据集的覆盖范围或平衡。
- 您的原始计数和功能基于一个非常大的数据集,您不想重新处理。 通过合并可以使用新数据更新的计数。
- 您希望确保将同一组基于计数的特征应用于在试验中使用的所有数据集。
如何配置生成计数转换
您可以直接从数据集创建基于计数的功能转换,并在每次运行实验时重新运行该功能。 或者,您可以生成一组计数,然后将其与新数据合并,以创建更新的计数表。
-
如果你之前未创建计数,请从此处开始。 您可以使用 " 生成计数转换 " 模块创建计数表,并自动生成一组功能。
此过程使用 " 应用转换 " 模块创建一个可应用于数据集的功能转换。
-
如果已从以前的数据集生成计数表,则只生成新数据的计数,或导入在机器学习早期版本中创建的现有计数表。 然后,合并两组计数表
此过程使用 " 应用转换 " 模块创建一个可应用于数据集的新功能转换。
基于数据集创建基于计数的功能
在机器学习 Studio (经典) 中,将 "生成计数转换" 模块添加到试验中。 可以在 "数据转换" 下的 "类别Learning中找到该模块。
连接要用作基于计数的功能基础的数据集。
使用 " 类数 " 选项可以指定标签列中的值的数目。
- 对于任何二元分类问题,请键入
2
。 - 对于具有两个以上可能输出的分类问题,你必须提前指定类进行计数的精确数目。 如果输入的数字小于类的实际数量,则该模块将返回错误。
- 如果你的数据集包含多个类值并且类标签值为非连续的,则必须使用 " 编辑元数据 " 来指定该列包含分类值。
- 对于任何二元分类问题,请键入
对于选项 " 哈希函数的位数",指示在对值进行哈希处理时要使用的位数。
通常情况下,接受默认值是安全的,除非你知道有很多值要计数,并且可能需要较高的位计数。
在 哈希函数的种子中,你可以选择指定一个值来播种哈希函数。 手动设置种子通常是在您想要确保哈希结果在同一试验的运行中具有确定性时进行的。
根据存储模式,使用 " 模块类型 " 选项来指示要计数的数据类型:
数据集:如果要对保存为数据集的数据进行计数机器学习 Studio (经典) ,请选择此选项。
Blob:如果用于生成计数的源数据作为块 Blob 存储在 Windows Azure 存储中,请选择此选项。
MapReduce:如果想要调用 Map/化简函数来处理数据,请选择此选项。
若要使用此选项,必须在 Windows Azure 存储中将新数据提供为 blob,并且必须具有对已部署的 HDInsight 群集的访问权限。 运行试验时,将在群集中启动一个映射/化简作业来执行计数。
对于非常大的数据集,我们建议尽可能使用此选项。 尽管你可能会承担有关使用 HDInsight 服务的额外开销,但对大型数据集的计算可能在 HDInsight 中更快。
有关详细信息,请参阅 https://azure.microsoft.com/services/hdinsight/。
指定数据存储模式后,为所需的数据提供任何其他连接信息:
- 如果使用的是 Hadoop 或 blob 存储中的数据,请提供群集位置和凭据。
- 如果以前在试验中使用了 " 导入数据 " 模块来访问数据,则必须重新输入帐户名称和凭据。 生成计数转换模块会单独访问数据存储,以便读取数据和生成所需的表。
对于 标签列或索引,选择一个列作为标签列。
标签列是必需的。 必须已将列标记为标签,否则将引发错误。
使用 " 选择要计数的列" 选项,然后选择要为其生成计数的列。
通常,最佳候选项为高维列以及与这些列关联的任何其他列。
使用 " 计数表类型 " 选项来指定用于存储计数表的格式。
Dictionary:创建字典计数表。 所选列中的所有列值都被视为字符串,并使用最多 31 位大小的比特数组进行哈希运算。 因此,由非负 32 位整数表示所有列的值。
通常,对于较小的数据集,应使用此选项 (小于 1 GB) ,并对较大的数据集使用 CMSketch 选项。
选择此选项后,配置哈希函数使用的位数,并设置用于初始化哈希函数的种子。
CMSketch:创建 计数最小值草绘表。 使用此选项,可以将更小范围的多个独立哈希函数用于提高内存效率并降低哈希冲突的可能性。 哈希位大小和哈希种子的参数对此选项没有影响。
运行试验。
此模块创建 特征化转换 ,可以将其用作 " 应用转换 " 模块的输入。 " 应用转换 " 模块的输出是一个转换后的数据集,可用于对模型进行定型。
如果要将基于计数的特征集与另一组基于计数的特征合并,则可以选择保存转换。 有关详细信息,请参阅 合并计数转换。
合并多个数据集中的计数和功能
在机器学习 Studio (经典) 中,将 "生成计数转换" 模块添加到试验中,并连接包含要添加的新数据的数据集。
使用 " 模块类型 " 选项来指示新数据的源。 可以合并来自不同源的数据。
数据集:如果在机器学习 Studio 中将新数据作为数据集提供 (经典) ,则选择此选项。
Blob:如果新数据作为块 Blob 提供 Windows Azure 存储中,请选择此选项。
MapReduce:如果想要调用 Map/化简函数来处理数据,请选择此选项。
若要使用此选项,必须在 Windows Azure 存储中将新数据提供为 blob,并且必须具有对已部署的 HDInsight 群集的访问权限。 运行试验时,将在群集中启动一个映射/化简作业来执行计数。
指定数据存储模式后,为新数据提供任何其他连接信息:
如果使用的是 Hadoop 或 blob 存储中的数据,请提供群集位置和凭据。
如果以前在试验中使用了 " 导入数据 " 模块来访问数据,则必须重新输入帐户名称和凭据。 原因在于, 生成计数转换 模块会单独访问数据存储,以便读取数据和生成所需的表。
合并计数时,以下选项在这两个计数表中必须完全相同:
- 类的数目
- 哈希函数比特数
- 哈希函数种子
- 选择要计数的列
标签列可以不同,前提是它包含的类的数目相同。
使用 " 计数表类型 " 选项指定已更新的计数表的格式和目标。
提示
要合并的两个计数表的格式必须相同。 换句话说,如果使用 字典 格式保存了以前的计数表,则无法将其与使用 CMSketch 格式保存的计数合并。
运行试验。
此模块创建 特征化转换 ,可以将其用作 " 应用转换 " 模块的输入。 " 应用转换 " 模块的输出是一个转换后的数据集,可用于对模型进行定型。
若要将此计数集与现有的一组基于计数的功能合并,请参阅 合并计数转换。
示例
请参阅以下文章,了解有关计数算法的详细信息,以及与其他方法相比,基于计数的建模的效力。
Azure AI 库中的以下试验演示了如何使用基于计数的学习来构建各种预测模型:
模块参数
以下参数用于所有选项:
名称 | 类型 | 范围 | 可选 | 默认 | 说明 |
---|---|---|---|---|---|
分类数 | Integer | >= 2 | 必须 | 2 | 标签的类数。 |
哈希函数比特数 | Integer | [12; 31] | 必选 | 20 | 哈希函数范围的位数。 |
哈希函数种子 | Integer | any | 必选 | 1 | 哈希函数的种子。 |
模块类型 | 必选 | 数据集 | 生成计数表时要使用的模块的类型。 | ||
计数表类型 | CountTableType | 从列表中选择 | 必选 | 字典 | 指定计数表的格式。 |
选择 " blob " 选项时,将应用以下选项。
名称 | 类型 | 范围 | 可选 | 默认 | 说明 |
---|---|---|---|---|---|
Blob 名称 | String | any | 必选 | 输入 blob 的名称。 不要包含容器名称。 | |
帐户名称 | String | any | 必选 | 存储帐户的名称。 | |
帐户密钥 | SecureString | any | 必选 | 存储帐户的密钥。 | |
容器名称 | String | any | 必选 | 包含输入 blob 的 Azure blob 容器。 | |
计数列 | String | any | 必选 | 要执行计数的列组的从1开始的索引。 | |
标签列 | Integer | >=1 | 必选 | 1 | 标签列的从1开始的索引。 |
Blob 格式 | any | 必选 | CSV | Blob 文本文件格式。 |
使用MapReduce生成计数时,以下参数适用:
名称 | 类型 | 范围 | 可选 | 默认 | 说明 |
---|---|---|---|---|---|
默认存储帐户名 | String | any | 必选 | 无 | 包含输入 blob 的存储帐户的名称。 |
默认的存储帐户密钥 | SecureString | any | 必选 | 无 | 包含输入 blob 的存储帐户的密钥。 |
默认的容器名称 | String | any | 必选 | 无 | 要写入计数表的 blob 容器的名称。 |
群集 URI | String | any | 必选 | 无 | HDInsight Hadoop 群集的 URI。 |
用户名 | String | any | 必选 | 无 | 登录到 HDInsight Hadoop 群集的用户名。 |
以下参数定义了计数表的格式:
名称 | 类型 | 范围 | 可选 | 默认 | 说明 |
---|---|---|---|---|---|
计数表类型 | CountTableType | 列表 | 必选 | 字典 | 计数表的类型。 |
标签列索引或名称 | ColumnSelection | 如果 count 表保存为数据集,则为必需 | 无 | 选择标签列。 | |
选择要计数的列 | ColumnSelection | 如果 count 表保存为数据集,则为必需 | 选择计数的列。 这些列被视为分类特征。 | ||
CM 草图表的深度 | Integer | >=1 | 如果 count 表使用 CMSketch 格式,则为必需 | 4 | CM 草绘表的深度,与哈希函数的数目相等。 |
CM 草图表的宽度 | Integer | [1;31] | 如果 count 表使用 CMSketch 格式,则为必需 | 20 | CM 草绘表的宽度,它是一系列哈希函数的位数。 |
标签列索引或 namecolumn | ColumnSelection | 如果 count 表保存为数据集,则为必需 | 选择标签列。 | ||
选择要计数的列 | ColumnSelection | 如果 count 表保存为数据集,则为必需 | 选择要计数的列。 这些列被视为分类特征。 | ||
计数表类型 | 如果 count 表保存为数据集,则为必需 | 字典 | 指定计数表的类型。 | ||
CM 草图表的深度 | Integer | >=1 | 如果 count 表保存为 CMSketch,则为必需 | 4 | CM 草绘表深度,它等于哈希函数的数目。 |
CM 草图表的宽度 | Integer | [1;31] | 如果 count 表保存为 CMSketch,则为必需 | 20 | CM 草绘表宽度,它是一系列哈希函数的位数。 |
Outputs
名称 | 类型 | 说明 |
---|---|---|
计数转换 | ITransform 接口 | 计数转换。 |
例外
异常 | 描述 |
---|---|
错误 0003 | 如果一个或多个输入为 NULL 或为空,将出现异常。 |
错误 0004 | 如果参数小于或等于特定值,将出现异常。 |
错误 0005 | 如果参数小于特定值,将出现异常。 |
错误 0007 | 如果参数大于特定值,将出现异常。 |
错误 0009 | 如果错误地指定了 Azure 存储帐户名称或容器名称,则会发生异常。 |
错误 0065 | 如果指定的 Azure blob 名称不正确,将出现异常。 |
错误 0011 | 如果传递的列集参数不适用于任何数据集列,将出现异常。 |
错误 0049 | 无法分析文件时,会出现异常。 |
错误 1000 | 内部库异常。 |
错误 0059 | 如果无法分析列选取器中指定的列索引,将出现异常。 |
错误 0060 | 在列选取器中指定的列范围在范围之外时,会出现异常。 |
错误 0089 | 当指定的类数小于数据集中用于计数的实际类数时将发生异常。 |
有关特定于 Studio (经典) 模块的错误列表,请参阅机器学习错误代码。
有关 API 异常的列表,请参阅机器学习 REST API 错误代码。