

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

# K 近鄰 (k-NN) 演算法
<a name="k-nearest-neighbors"></a>

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

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

**Topics**
+ [k-NN 演算法的輸入/輸出介面](#kNN-input_output)
+ [k-NN 範例筆記本](#kNN-sample-notebooks)
+ [k-NN 演算法的運作方式](kNN_how-it-works.md)
+ [適用於 k-NN 演算法的 EC2 執行個體建議](#kNN-instances)
+ [k-NN 超參數](kNN_hyperparameters.md)
+ [調校 k-NN 模型](kNN-tuning.md)
+ [k-NN 訓練輸入的資料格式](kNN-in-formats.md)
+ [k-NN 請求和回應格式](kNN-inference-formats.md)

## k-NN 演算法的輸入/輸出介面
<a name="kNN-input_output"></a>

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 訓練輸入的資料格式](kNN-in-formats.md) (針對訓練)、[k-NN 請求和回應格式](kNN-inference-formats.md) (針對推論) 及[k-NN 範例筆記本](#kNN-sample-notebooks)。

## k-NN 範例筆記本
<a name="kNN-sample-notebooks"></a>

如需使用 SageMaker AI k 近鄰演算法的範例筆記本，預測地質和林務局資料的荒野土地覆蓋類型，請參閱 [K 近鄰土地覆蓋類型](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/k_nearest_neighbors_covtype/k_nearest_neighbors_covtype.html)。

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

## 適用於 k-NN 演算法的 EC2 執行個體建議
<a name="kNN-instances"></a>

建議您在 CPU 執行個體 (例如 ml.m5.2xlarge) 或 GPU 執行個體上進行訓練。k-NN 演算法可支援 P2、P3、G4dn 和 G5 GPU 執行個體系列，進行訓練和推論。

來自 CPU 的推論請求，其平均延遲通常低於來自 GPU 的請求，因為當您使用 GPU 硬體時，CPU 對 GPU 通訊有很重的負擔。不過，GPU 針對較大的批次通常會有更高的輸送量。