关联预测结果使用输入记录 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

关联预测结果使用输入记录

当针对大型数据集进行预测时,可以排除进行预测时不需要的属性。进行预测后,您可以将某些排除的属性和这些预测或报告中的其他输入数据关联起来。通过使用批量转换来执行这些数据处理步骤,您通常可以消除其他预处理或后处理。您只能使用 JSON 和 CSV 格式的输入文件。

将推理与输入记录相关联的工作流程

下图显示将推理与输入记录相关联的工作流程。

要将推理与输入数据相关联,有三个主要步骤:

  1. 筛选进行推理时不需要的输入数据,然后再将输入数据传递到批量转换作业。使用InputFilter参数使用哪些属性作为模型的输入。

  2. 将输入数据和推理结果关联。使用JoinSource参数将输入数据与推理结合起来。

  3. 筛选联接的数据,以保留用来为解释报告中的预测提供上下文所需的输入。使用OutputFilter使用存储输出文件中联接的数据集的指定部分。

在批量转换作业中使用数据处理

当使用创建批量转换作业时CreateTransformJob到进程数据:

  1. 使用指定要传输到模型的部分。InputFilter中的参数DataProcessing数据结构。

  2. 使用 JoinSource 参数联接原始输入数据和转换后的数据。

  3. 使用指定批量转换作业中哪部分联接输入数据和转换后的数据要包含在输出文件中,使用OutputFilter参数。

  4. 选择 JSON 或 CSV 格式的文件作为输入:

    • 对于 JSON 或 JSON 行格式的输入文件,SageMaker 会添加SageMakerOutput属性转换为输入文件,或者创建一个新的 JSON 输出文件,使用SageMakerInputSageMakerOutput属性。有关更多信息,请参阅 DataProcessing

    • 对于 CSV 格式的输入文件,联接的输入数据后跟转换后的数据,而输出是 CSV 文件。

如果你将算法与DataProcessing结构,它必须支持你选择的格式输入和输出文件。例如,使用TransformOutput字段中的CreateTransformJobAPI,你必须同时设置ContentTypeAccept参数为以下任一值:text/csvapplication/json,或者application/jsonlines. 在 CSV 文件中指定列的语法与在 JSON 文件中指定属性的语法是不同的。使用错误的语法会导致错误。有关更多信息,请参阅 批量转换示例。有关用于内置算法的输入和输出文件格式的更多信息,请参阅使用 Amazon SageMaker 内置算法或预训练模型

输入和输出的记录分隔符也必须符合所选的文件输入。这些区域有:SplitType参数指示如何拆分输入数据集中的记录。这些区域有:AssembleWith参数指示如何重组记录以进行输出。如果您将输入和输出格式设置为 text/csv,还必须将 SplitTypeAssembleWith 参数设置为 line。如果您将输入和输出格式设置为 application/jsonlines,则可以将 SplitTypeAssembleWith 这两者设置为 line

对于 CSV 文件,不能使用嵌入的换行符。对于 JSON 文件,属性名称 SageMakerOutput 预留用于输出。JSON 输入文件不得具有使用此名称的属性。否则,输入文件中的数据可能被覆盖。

支持的 JSONPath 运算符

要筛选并联接输入数据和推理,请使用 JSONPath 子表达式。SageMaker 仅支持定义的 JSONPath 运算符子集。下表列出了支持的 JSONPath 运算符。对于 CSV 数据,每一行都被视为 JSON 数组,因此只能应用基于索引的 JSONPath,例如 $[0]$[1:]。CSV 数据也应遵循 RFC 格式

JSONPath 运算符 描述 示例
$

查询的根元素。所有路径表达式的开头都需要此运算符。

$
.<name>

一个以点表示的子元素。

$.id

*

一个通配符。用来代替属性名称或数值。

$.id.*

['<name>' (,'<name>')]

一个括号表示的元素或多个子元素。

$['id','SageMakerOutput']

[<number> (,<number>)]

一个索引或索引数组。也支持否定索引值。-1 索引指数组中的最后一个元素。

$[1] , $[1,3,5]

[<start>:<end>]

数组 Slice 运算符。数组 slice() 方法提取数组的一部分并返回一个新数组。如果你省略<start>,SageMaker 使用数组的第一个元素。如果你省略<end>,SageMaker 使用数组的最后一个元素。

$[2:5], $[:5], $[2:]

使用括号表示法指定给定字段的多个子元素时,不支持在括号内添加子元素。例如,支持 $.field1.['child1','child2'] 而不支持 $.field1.['child1','child2.grandchild']

有关 JSONPath 运算符的更多信息,请参阅 GitHub 上的 JsonPath

批量转换示例

以下示例显示了一些将输入数据与预测结果联接的常用方法。

例如:仅输出推理

默认为DataProcessing参数不将推理结果与输入联接。它仅输出推理结果。

如果你想明确指定不能用输入加入结果,u使用Amazon SageMaker Python 开发工具包在转换器通话中指定以下设置。

sm_transformer = sagemaker.transformer.Transformer(…) sm_transformer.transform(…, input_filter="$", join_source= "None", output_filter="$")

要使用输出推理Amazon适用于 Python 的开发工具包,将以下代码添加到 CreateTransformJob 请求。下面的代码模仿了默认行为。

{ "DataProcessing": { "InputFilter": "$", "JoinSource": "None", "OutputFilter": "$" } }

例如:输出推断与输入数据联接

如果您使用的是Amazon SageMaker Python 开发工具包要将输入数据与输出文件中的推理结合起来,请指定assemble_withaccept初始化变压器对象时的参数。使用转换调用时,请指定Input(对于 )join_source参数,然后指定split_typecontent_type参数也可以。这些区域有:split_type参数必须具有与相同的值assemble_with,以及content_type参数必须具有与相同的值accept. 有关参数及其接受值的更多信息,请参阅转换器中的 “页面”Amazon SageMaker Python 开发工具包.

sm_transformer = sagemaker.transformer.Transformer(…, assemble_with="Line", accept="text/csv") sm_transformer.transform(…, join_source="Input", split_type="Line", content_type="text/csv")

如果您使用的是Amazon适用于 Python 的 SDK (Boto 3),通过将以下代码添加到您的推理,联接所有输入数据与推理。CreateTransformJob请求. 的值AcceptContentType必须匹配,并且AssembleWithSplitType还必须匹配。

{ "DataProcessing": { "JoinSource": "Input" }, "TransformOutput": { "Accept": "text/csv", "AssembleWith": "Line" }, "TransformInput": { "ContentType": "text/csv", "SplitType": "Line" } }

对于 JSON 或 JSON 行输入文件,结果位于输入 JSON 文件的 SageMakerOutput 键中。例如,如果输入是一个 JSON 文件,其中包含键值对 {"key":1},则数据转换结果可能是 {"label":1}

SageMaker 专卖店都在中的输入文件中SageMakerInput键。

{ "key":1, "SageMakerOutput":{"label":1} }
注意

JSON 的联接结果必须是键值对对象。如果输入不是键值对象,SageMaker 会创建一个新的 JSON 文件。在新的 JSON 文件中,输入数据存储在 SageMakerInput 键中,而结果存储为 SageMakerOutput 值。

对于 CSV 文件,例如,如果记录为[1,2,3],标签结果是[1],那么输出文件将包含[1,2,3,1].

例如:输出推理与输入数据联接,并从输入中排除 ID 列 (CSV)

如果您使用的是Amazon SageMaker Python 开发工具包要将输入数据与推理输出联接,同时从转换器输入中排除 ID 列,请为input_filter在你的变压器通话中。例如,如果输入数据包含五列,而第一列是 ID 列,请使用以下转换请求选择除 ID 列以外的所有列作为要素。变压器仍然输出与推断连接的所有输入列。有关参数及其接受值的更多信息,请参阅转换器中的 “页面”Amazon SageMaker Python 开发工具包.

sm_transformer = sagemaker.transformer.Transformer(…, assemble_with="Line", accept="text/csv") sm_transformer.transform(…, split_type="Line", content_type="text/csv", input_filter="$[1:]", join_source="Input")

如果您使用的是Amazon适用于 Python 的 SDK (Boto 3),请将以下代码添加到您的 CreateTransformJob请求.

{ "DataProcessing": { "InputFilter": "$[1:]", "JoinSource": "Input" }, "TransformOutput": { "Accept": "text/csv", "AssembleWith": "Line" }, "TransformInput": { "ContentType": "text/csv", "SplitType": "Line" } }

要在 SageMaker 中指定列,请使用数组元素的索引。第一列是索引 0,第二列是索引 1,第六列是索引 5。

要从输入中排除第一列,请将InputFilter"$[1:]". 冒号 (:) 告知 SageMaker 包含两个值(含这两个值)之间的所有元素。例如,$[1:4] 指定第二列到第五列。

如果您省略冒号后的数字,例如 [5:],则子集包含第六列至最后一列的所有列。如果您省略冒号前的数字,例如 [:5],则子集包含第一列(索引 0)至第六列的所有列。

例如:输出推理与 ID 列联接,并从输入中排除 ID 列 (CSV)

如果您使用的是Amazon SageMaker Python 开发工具包,您可以将输出指定为仅将特定输入列(例如 ID 列)与推断联接起来,方法是指定output_filter在变压器电话中。这些区域有:output_filter使用 jsonPath 子表达式来指定在将输入数据与推理结果联接后作为输出返回的列。以下请求显示了如何在排除 ID 列的同时进行预测,然后将 ID 列加入推断。请注意,在以下示例中,最后一列 (-1)输出中包含推论。如果您使用的是 JSON 文件,则 SageMaker 将推理结果存储在属性中SageMakerOutput. 有关参数及其接受值的更多信息,请参阅转换器中的 “页面”Amazon SageMaker Python 开发工具包.

sm_transformer = sagemaker.transformer.Transformer(…, assemble_with="Line", accept="text/csv") sm_transformer.transform(…, split_type="Line", content_type="text/csv", input_filter="$[1:]", join_source="Input", output_filter="$[0,-1]")

如果您使用的是Amazon适用于 Python 的 SDK (Boto 3),通过将以下代码添加到您的,联接 ID 列和推理。CreateTransformJob请求.

{ "DataProcessing": { "InputFilter": "$[1:]", "JoinSource": "Input", "OutputFilter": "$[0,-1]" }, "TransformOutput": { "Accept": "text/csv", "AssembleWith": "Line" }, "TransformInput": { "ContentType": "text/csv", "SplitType": "Line" } }
警告

如果您使用的是 JSON 格式的输入文件,该文件不能包含属性名称 SageMakerOutput。此属性名称预留供输出文件中的推理使用。如果您的 JSON 格式的输入文件包含具有此名称的属性,则输入文件中的值可能会被推理覆盖。