予測結果を入力レコードに関連付ける - Amazon SageMaker

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

予測結果を入力レコードに関連付ける

大きなデータセットで予測を行う場合、予測に不要な属性を除外できます。予測を行った後で、除外した属性の一部をそれらの予測と関連付けたり、レポート内の他の入力データと関連付けたりすることができます。バッチ変換を使用してこれらのデータ処理ステップを実行することで、多くの場合、追加の前処理や後処理を排除できます。入力ファイルは JSONおよび CSV形式でのみ使用できます。

推論を入力レコードに関連付けるワークフロー

次の図は、推論を入力レコードに関連付けるワークフローを示しています。

推論を入力レコードに関連付けるためのワークフロー。

推論を入力データに関連付けるには、主に 3 つのステップがあります。

  1. 入力データをバッチ変換ジョブに渡す前に、推論に不要な入力データをフィルタリングします。InputFilter パラメータを使用して、モデルの入力として使用する属性を決定します。

  2. 入力データを推論結果に関連付けます。JoinSource パラメータを使用して、入力データと推論を結合します。

  3. 結合したデータをフィルタリングして、レポート内の予測を解釈するためのコンテキストの提供に必要な入力を保持します。OutputFilter を使用して、結合データセットの指定部分を出力ファイルに格納します。

バッチ変換ジョブでのデータ処理の使用

CreateTransformJob でバッチ変換ジョブを作成してデータを処理する場合:

  1. DataProcessing データ構造内の InputFilter パラメータを使用して、モデルに渡す入力部分を指定します。

  2. JoinSource パラメータを使用して、生の入力データを変換されたデータと結合します。

  3. 出力ファイルに含める結合入力部分と、バッチ変換ジョブからの変換済みデータを、OutputFilter パラメータで指定します。

  4. 入力には JSONまたは CSV形式のファイルを選択します。

    • JSONまたは JSON Lines 形式の入力ファイルの場合、 は SageMakerOutput 属性を入力ファイルに追加する SageMaker か、 SageMakerInput 属性と SageMakerOutput 属性を含む新しいJSON出力ファイルを作成します。詳細については、「DataProcessing」を参照してください。

    • CSV形式の入力ファイルの場合、結合された入力データの後に変換されたデータが続き、出力は CSV ファイルになります。

DataProcessingDataProcessing 構造でアルゴリズムを使用する場合は、入力ファイルと出力ファイルの両方で、選択した形式がサポートされている必要があります。例えば、 の TransformOutputフィールドではAPI、 パラメータContentTypeCreateTransformJob Acceptパラメータの両方を text/csv、、application/jsonまたは の値のいずれかに設定する必要がありますapplication/jsonlines。ファイルで列を指定し、CSVファイルで属性を指定するための構文JSONは異なります。誤った構文を使用すると、エラーが発生します。詳細については、「バッチ変換の例」を参照してください。組み込みアルゴリズムの入力ファイルと出力ファイルの形式の詳細については、「Amazon SageMaker 組み込みアルゴリズムまたは事前トレーニング済みモデルを使用する」を参照してください。

入力と出力のレコード区切り文字も、選択したファイルの入力と一致している必要があります。SplitType パラメータは、入力データセットのレコードを分割する方法を示しています。AssembleWith パラメータは、出力用にレコードを再構成する方法を示します。入力および出力形式を text/csv に設定した場合は、SplitType および AssembleWith パラメータも line に設定する必要があります。入力形式および出力形式を application/jsonlines に設定した場合は、SplitTypeAssembleWith の両方を line に設定できます。

CSV ファイルには、埋め込み改行文字を使用できません。JSON ファイルの場合、属性名SageMakerOutputは出力用に予約されています。JSON 入力ファイルには、この名前の属性を含めることはできません。含めた場合、入力ファイルのデータは上書きされる可能性があります。

サポートされているJSONPath演算子

入力データと推論をフィルタリングして結合するには、JSONPath部分式を使用します。 SageMaker は、定義されたJSONPath演算子のサブセットのみをサポートします。次の表に、サポートされているJSONPath演算子を示します。CSV データの場合、各行はJSON配列として取得されるため、、 など、インデックスベースの $[0]のみを適用JSONPathsできます$[1:]。CSV データも RFC の形式に従う必要があります。

JSONPath 演算子 説明
$

クエリするルート要素。この演算子は、すべてのパス式の先頭に必要です。

$
.<name>

ドット表記の子要素。

$.id

*

ワイルドカード。属性名または数値の代わりに使用します。

$.id.*

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

大括弧で表記された要素または複数の子要素。

$['id','SageMakerOutput']

[<number> (,<number>)]

インデックスまたはインデックスの配列。負のインデックス値もサポートされています。-1 インデックスは配列の最後の要素を表します。

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

[<start>:<end>]

配列のスライス演算子。array slice () メソッドは、配列のセクションを抽出し、新しい配列を返します。を省略した場合 <start>、配列の最初の要素 SageMaker を使用します。を省略した場合 <end>、配列の最後の要素 SageMaker を使用します。

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

角かっこ表記を使用して特定のフィールドの複数の子要素を指定する場合、かっこ内に子のネストを追加することはサポートされていません。たとえば、$.field1.['child1','child2'] はサポートされますが、$.field1.['child1','child2.grandchild'] はサポートされません。

JSONPath 演算子の詳細については、「」のJsonPath「」を参照してください GitHub。

バッチ変換の例

次の例は、入力データと予測結果を結合するための一般的な方法を示しています。

例 : 推論のみを出力する

デフォルトでは、DataProcessing パラメータは推論結果を入力と結合しません。推論結果のみが出力されます。

結果を入力と結合しないように明示的に を指定する場合は、Amazon SageMaker Python SDKを使用し、トランスフォーマー呼び出しで次の設定を指定します。

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

を使用して推論を出力するには AWS SDK Python の場合は、次のコードを CreateTransformJob リクエストに追加します。以下のコードは、デフォルトの動作を模倣しています。

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

例: 入力データと結合した推論を出力する

Amazon SageMaker Python SDKを使用して入力データと出力ファイルの推論を組み合わせる場合は、トランスフォーマーオブジェクトを初期化するときに assemble_with および acceptパラメータを指定します。変換呼び出しを使用するときは、join_source パラメータに Input を指定し、split_type パラメータおよび content_type パラメータも指定します。split_type パラメータは assemble_with と同じ値、content_type パラメータは accept と同じ値である必要があります。パラメータとその受け入れられる値の詳細については、Amazon Python の「Transformer」ページを参照してください。 SageMaker SDK

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

を使用している場合 AWS SDK for Python (Boto 3) では、次のコードをCreateTransformJobリクエストに追加して、すべての入力データを推論に結合します。AcceptContentType の値は一致する必要があり、AssembleWithSplitType の値も一致する必要があります。

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

JSON または JSON Lines 入力ファイルの場合、結果は入力JSONファイルの SageMakerOutput キーにあります。例えば、入力がキーと値のペア を含むJSONファイルである場合{"key":1}、データ変換結果は になる可能性があります{"label":1}

SageMaker は、両方を入力ファイル のSageMakerInputキーに保存します。

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

の結合結果は、キーと値のペアオブジェクトJSONである必要があります。入力がキーと値のペアオブジェクトでない場合、 は新しいJSONファイル SageMaker を作成します。新しいJSONファイルでは、入力データが SageMakerInput キーに保存され、結果は SageMakerOutput値として保存されます。

例えば、CSVファイルの場合、レコードが で[1,2,3]、ラベル結果が の場合[1]、出力ファイルには が含まれます[1,2,3,1]

例: 入力データと結合された推論を出力し、入力から ID 列を除外する (CSV)

Amazon SageMaker Python SDK を使用して入力データを推論出力と結合し、トランスフォーマー入力から ID 列を除外する場合は、トランスフォーマー呼び出しinput_filterで、前の例と同じパラメータと のJSONPathサブ式を指定します。例えば、入力データに 5 つの列があり、最初の 1 つが ID 列である場合、次の変換リクエストを使用して、ID 列を除 くすべての列を特徴として選択します。トランスフォーマーは引き続き、推論と結合されたすべての入力列を出力します。パラメータとその受け入れられる値の詳細については、Amazon Python の「Transformer」ページを参照してください。 SageMaker SDK

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")

を使用している場合 AWS SDK for Python (Boto 3) で、次のコードを CreateTransformJobリクエストに追加します。

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

で列を指定するには SageMaker、配列要素のインデックスを使用します。最初の列はインデックス 0、2 番目の列はインデックス 1、6 番目の列はインデックス 5 です。

入力から最初の列を除外するには、InputFilter"$[1:]" に設定します。コロン (:) は、2 つの値の間にすべての要素を含める SageMaker ように に指示します。たとえば、$[1:4] は 2 番目から 5 番目の列を指定します。

コロンの後の数字を省略すると ([5:] など)、サブセットには 6 番目の列から最後の列までのすべての列が含まれます。コロンの前の数字、たとえば [:5] を省略すると、サブセットには最初の列 (インデックス 0) から 6 番目の列までのすべての列が含まれます。

例: ID 列に結合された推論を出力し、入力から ID 列を除外する (CSV)

Amazon SageMaker Python を使用している場合はSDK、トランスフォーマー呼び出しoutput_filterで を指定することで、特定の入力列 (ID 列など) のみを推論と結合するように出力を指定できます。はJSONPath部分式output_filterを使用して、入力データを推論結果に結合した後に出力として返す列を指定します。次のリクエストは、ID 列を除外して予測を行い、ID 列を推論と結合する方法を示しています。次の例では、出力の最後の列 (-1) に推論が含まれていることに注意してください。JSON ファイルを使用している場合、 は推論結果を属性 に SageMaker 保存しますSageMakerOutput。パラメータとその受け入れられる値の詳細については、Amazon Python の「Transformer」ページを参照してください。 SageMaker SDK

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]")

を使用している場合 AWS SDK for Python (Boto 3) では、次のコードをCreateTransformJobリクエストに追加して、ID 列のみを推論に結合します。

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

JSON形式の入力ファイルを使用している場合、ファイルには属性名 を含めることはできませんSageMakerOutput。この属性名は出力ファイルの推論用に予約されています。JSON形式の入力ファイルにこの名前の属性が含まれている場合、入力ファイル内の値は推論で上書きされる可能性があります。