K 近鄰 (k-NN) 演算法 - Amazon SageMaker

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

K 近鄰 (k-NN) 演算法

Amazon SageMaker k-nearest 鄰居 (k-NN) 演算法是一種以索引為基礎的演算法。它使用非參數方法處理分類或迴歸。針對分類問題,此演算法會查詢最鄰近範例點的 k 個點,傳回其類別最常用的標籤做為預估標籤。針對迴歸問題,此演算法會查詢最鄰近範例點的 k 個點,傳回其特徵值的平均做為預估值。

利用 k-NN 演算法的訓練有三個步驟:取樣、降維和建構索引。取樣會減少初始資料集的大小,以符合記憶體。針對降維,此演算法會減少資料的特徵維度以縮減記憶體和推論延遲中的 k-NN 模型規模。我們提供兩種降維方法:隨機投影和快速 Johnson-Lindenstrauss 轉換。一般而言,您針對高維度 (d > 1000) 資料集使用降維,避免隨著維度增加造成資料統計分析變得疏鬆的 “維度災難”。k-NN 訓練的主要目標是建構索引。索引可讓點與點間距離的查詢有效率,這些點的值或類別標籤尚未決定而 k 最近點用於推論。

k-NN 演算法的輸入/輸出介面

SageMaker k-NN 支援訓練和測試資料通道。

  • 使用訓練通道處理您想要取樣與建構成 k-NN 索引的資料。

  • 使用測試通道在日誌檔發出分數。每個微型批次列一行分數:classifier 為準確性,regressor 為分數的均方誤差 (mse)。

針對訓練輸入,k-NN 支援 text/csvapplication/x-recordio-protobuf 資料格式。針對輸入類型 text/csv,第一個 label_size 欄會轉譯為該資料列的標籤向量。您可以使用檔案模式或管道模式,以 recordIO-wrapped-protobufCSV 格式的資料來訓練模型。

針對推論輸入,k-NN 支援 application/jsonapplication/x-recordio-protobuftext/csv 資料格式。text/csv 格式接受 label_size 和編碼參數。它假設 0 label_size的 和 UTF-8 編碼。

針對推論輸出,k-NN 支援 application/jsonapplication/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 K 最近鄰接演算法從地質和樹系服務資料預測荒野覆蓋類型的筆記本範例,請參閱 K 最近鄰接覆蓋類型

使用 Jupyter 筆記本執行個體在 中執行範例 SageMaker。若要了解如何在 中建立和開啟 Jupyter 筆記本執行個體 SageMaker,請參閱 Amazon SageMaker Notebook 執行個體。建立並開啟筆記本執行個體後,請選取SageMaker 範例索引標籤以查看所有 SageMaker 範例筆記本的清單。在 Amazon 演算法簡介一節中尋找 K 近鄰筆記本。若要開啟筆記本,請按一下其使用標籤,然後選取建立複本

EC2 k-NN 演算法的執行個體建議

我們建議對CPU執行個體 (例如 ml.m5.2xlarge) 或GPU執行個體進行訓練。k-NN 演算法支援 P2, P3, G4dn和 G5 GPU執行個體系列進行訓練和推論。

來自 的推論請求通常比來自 的請求的平均延遲CPUs更低,GPUs因為當您使用GPU硬體時, CPU-to-GPU通訊需要繳稅。不過,較大的批次GPUs通常具有更高的輸送量。