本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
建立預測結果與輸入記錄的關聯性
建立大型資料集的預測時,您可以排除預測不需要的屬性。完成預測後,您可以建立一些已排除屬性與這些預測,或與報告中其他輸入資料的關聯性。使用批次轉換來執行這些資料處理步驟,您通常不需要額外的預先處理或後續處理。您只能使用JSON和CSV格式化的輸入檔案。
建立推論與輸入記錄關聯的工作流程
下圖顯示建立推論與輸入記錄關聯性的工作流程。
若要建立推論與輸入資料的關聯性,有三個主要步驟:
-
先篩選掉推論不需要的輸入資料,再將輸入資料傳送至批次轉換任務。使用
InputFilter
參數判斷做為模型輸入使用的屬性。 -
建立輸入資料與推論結果的關聯性。使用
JoinSource
參數,結合輸入資料與推論。 -
篩選掉已加入的資料,保留所需輸入,在報告中提供解譯預測的內容。使用
OutputFilter
將已聯結資料集的指定部分儲存在輸出檔案。
在批次轉換任務中使用資料處理
使用 CreateTransformJob
建立批次轉換工作處理資料時:
-
在
DataProcessing
資料結構中使用InputFilter
參數,指定要傳遞到模型的輸入部分。 -
使用轉換的資料和
JoinSource
參數加入原始輸入資料。 -
使用
OutputFilter
參數指定在輸出檔中要包含加入輸入和批次換任務轉換資料的哪些部分。 -
選擇 JSON-或-CSV 格式化的文件進行輸入:
-
對於 JSON-或JSON行格式的輸入檔案, SageMaker 可以將
SageMakerOutput
屬性新增至輸入檔案,或建立具有SageMakerInput
和SageMakerOutput
屬性的新JSON輸出檔案。如需詳細資訊,請參閱DataProcessing
。 -
對於CSV格式化的輸入文件,連接的輸入數據後跟轉換後的數據,輸出是一個文CSV件。
-
如果您使用演算法和 DataProcessing
結構,它必須同時支援您選擇的輸入檔和輸出檔格式。例如,對於的TransformOutput
欄位 CreateTransformJob
API,您必須將ContentType
和Accept
參數設定為下列其中一個值:text/csv
application/json
、或application/jsonlines
。在檔案中指定欄和指定CSV檔案屬性的JSON語法不同。使用錯誤的語法會造成錯誤。如需詳細資訊,請參閱批次轉換範例。如需內建演算法之輸入和輸出檔格式的詳細資訊,請參閱使用 Amazon SageMaker 內建演算法或預先訓練的模型。
輸入和輸出的記錄分隔符號也必須與您選擇的檔案輸入一致。SplitType
參數指出如何分割輸入資料集中的記錄。AssembleWith
參數指出如何重新組合輸出記錄。如果您將輸入和輸出格式設為 text/csv
,您還必須將 SplitType
和 AssembleWith
參數設為 line
。如果將輸入和輸出格式設為 application/jsonlines
,您就可以同時將 SplitType
和 AssembleWith
設為 line
。
對於CSV檔案,您不能使用內嵌換行符號。對於JSON檔案,屬性名稱會保留SageMakerOutput
供輸出使用。JSON輸入檔案不能具有此名稱的屬性。如有,則可能覆寫輸入檔中的資料。
支援的JSONPath操作
若要篩選並加入輸入資料和推論,請使用JSONPath子運算式。 SageMaker 僅支援已定義JSONPath運算子的子集。下表列出了支持的JSONPath運算符。對於數CSV據,每一行被視為一個數JSON組,所以只有基於索引JSONPaths可以應用$[0]
,例如$[1:]
。CSV數據也應遵循RFC格式
JSONPath運營商 | 描述 | 範例 |
---|---|---|
$ |
查詢的根元素。所有路徑表達式的開頭都必須有此運算子。 |
$ |
. |
以點標記的子元素。 |
|
* |
萬用字元。用以代替屬性名稱或數值。 |
|
[' |
以括號標記的元素或多個子元素。 |
|
[ |
索引或索引陣列。也支援負索引值。 |
|
[ |
陣列分割運算子。array slice() 方法會擷取陣列的一部分,並傳回新的陣列。如果省略 |
|
當使用括號表示法來指定特定欄位的多個子元素時,不支援括號內子項的額外巢狀。例如,支援 $.field1.['child1','child2']
,但不支援 $.field1.['child1','child2.grandchild']
。
有關JSONPath運算符的詳細資訊,請參閱中JsonPath
批次轉換範例
以下範例會示範一些結合輸入資料和預測結果的常見方式。
範例:僅輸出推論
根據預設,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 SDKassemble_with
和accept
參數。使用轉換呼叫時,join_source
參數請指定為 Input
,並指定 split_type
和 content_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")
如果您正在使用 AWS SDK對於 Python(Boto 3),通過將以下代碼添加到請求中,將所有輸入數據與推論聯接起來CreateTransformJob
。Accept
和 ContentType
的值必須相符,且 AssembleWith
和 SplitType
的值也必須相符。
{ "DataProcessing": { "JoinSource": "Input" }, "TransformOutput": { "Accept": "text/csv", "AssembleWith": "Line" }, "TransformInput": { "ContentType": "text/csv", "SplitType": "Line" } }
對於JSON或 L JSON ines 輸入文件,結果在輸入文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 SDKinput_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")
如果您正在使用 AWS SDK對於 Python(博托 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 SDKoutput_filter
在轉換器呼叫中指定,以指定僅將特定輸入資料行 (例如 ID 資料行) 與推論結合的輸出。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]")
如果您正在使用 AWS SDK對於 Python(博托 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-format 輸入文件包含具有此名稱的屬性,則輸入文件中的值可能會被推論覆蓋。