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

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

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

針對推論輸入,k-NN 支援 application/jsonapplication/x-recordio-protobuftext/csv 資料格式。text/csv 格式接受 label_size 和編碼參數。它假設 label_size 為 0 和 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 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 針對較大的批次通常會有更高的輸送量。