本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
K 近鄰 (k-NN) 演算法
Amazon SageMaker AI k 近鄰 (k-NN) 演算法是一種以索引為基礎的演算法。它使用非參數方法處理分類或迴歸。針對分類問題,此演算法會查詢最鄰近範例點的 k 個點,傳回其類別最常用的標籤做為預估標籤。針對迴歸問題,此演算法會查詢最鄰近範例點的 k 個點,傳回其特徵值的平均做為預估值。
利用 k-NN 演算法的訓練有三個步驟:取樣、降維和建構索引。取樣會減少初始資料集的大小,以符合記憶體。針對降維,此演算法會減少資料的特徵維度以縮減記憶體和推論延遲中的 k-NN 模型規模。我們提供兩種降維方法:隨機投影和快速 Johnson-Lindenstrauss 轉換。一般而言,您針對高維度 (d > 1000) 資料集使用降維,避免隨著維度增加造成資料統計分析變得疏鬆的 “維度災難”。k-NN 訓練的主要目標是建構索引。索引可讓點與點間距離的查詢有效率,這些點的值或類別標籤尚未決定而 k 最近點用於推論。
主題
k-NN 演算法的輸入/輸出介面
SageMaker AI k-NN 支援訓練和測試資料通道。
-
使用訓練通道處理您想要取樣與建構成 k-NN 索引的資料。
-
使用測試通道在日誌檔發出分數。每個微型批次列一行分數:
classifier
為準確性,regressor
為分數的均方誤差 (mse)。
針對訓練輸入,k-NN 支援 text/csv
和 application/x-recordio-protobuf
資料格式。針對輸入類型 text/csv
,第一個 label_size
欄會轉譯為該資料列的標籤向量。您可以使用檔案模式或管道模式,以 recordIO-wrapped-protobuf
或 CSV
格式的資料來訓練模型。
針對推論輸入,k-NN 支援 application/json
、application/x-recordio-protobuf
和 text/csv
資料格式。text/csv
格式接受 label_size
和編碼參數。它假設 label_size
為 0 和 UTF-8 編碼。
針對推論輸出,k-NN 支援 application/json
和 application/x-recordio-protobuf
資料格式。這兩種資料格式還支援詳細輸出模式。在詳細輸出模式中,API 提供從最小到最大的距離向量排序搜尋結果,以及標籤向量中的對應元素。
針對批次轉換,k-NN 的輸入和輸出都支援 application/jsonlines
資料格式。範例輸入如下:
content-type: application/jsonlines {"features": [1.5, 16.0, 14.0, 23.0]} {"data": {"features": {"values": [1.5, 16.0, 14.0, 23.0]}}
範例輸出如下:
accept: application/jsonlines {"predicted_label": 0.0} {"predicted_label": 2.0}
如需輸入和輸出檔案格式的詳細資訊,請參閱k-NN 訓練輸入的資料格式 (針對訓練)、k-NN 請求和回應格式 (針對推論) 及k-NN 範例筆記本。
k-NN 範例筆記本
如需使用 SageMaker AI K 近鄰演算法從地質和樹系服務資料預測荒野覆蓋類型的範例筆記本,請參閱 K 近鄰覆蓋類型
使用 Jupyter 筆記本執行個體在 SageMaker AI 中執行範例。若要了解如何在 SageMaker AI 中建立和開啟 Jupyter 筆記本執行個體,請參閱 Amazon SageMaker 筆記本執行個體。建立並開啟筆記本執行個體後,請選取 SageMaker AI 範例索引標籤,以查看所有 SageMaker AI 範例筆記本的清單。在 Amazon 演算法簡介一節中尋找 K 近鄰筆記本。若要開啟筆記本,請按一下其使用標籤,然後選取建立複本。
適用於 k-NN 演算法的 EC2 執行個體建議
建議您在 CPU 執行個體 (例如 ml.m5.2xlarge) 或 GPU 執行個體上進行訓練。k-NN 演算法可支援 P2、P3、G4dn 和 G5 GPU 執行個體系列,進行訓練和推論。
來自 CPU 的推論請求,其平均延遲通常低於來自 GPU 的請求,因為當您使用 GPU 硬體時,CPU 對 GPU 通訊有很重的負擔。不過,GPU 針對較大的批次通常會有更高的輸送量。