

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# K 最近傍 (k-NN) アルゴリズム
<a name="k-nearest-neighbors"></a>

Amazon SageMaker AI K 最近傍 (k-NN) アルゴリズムは、インデックスベースのアルゴリズムです。このアルゴリズムは、分類または回帰にノンパラメトリック手法を使用します。分類問題の場合、アルゴリズムはサンプルポイントに最も近い *k* ポイントに対してクエリを実行し、そのクラスで最も頻繁に使用されるラベルを予測ラベルとして返します。回帰問題の場合、アルゴリズムはサンプルポイントに最も近い *k* ポイントに対してクエリを実行し、それらの特徴値の平均を予測値として返します。

k-NN アルゴリズムを使用したトレーニングには、サンプリング、次元削減、およびインデックス構築の 3 つのステップがあります。サンプリングによって、初期データセットがメモリに収まるように、そのサイズが縮小されます。次元削減の場合、アルゴリズムはデータの特徴次元を削減して、メモリ内の k-NN モデルのフットプリントと推論レイテンシーを減らします。ランダムプロジェクションと高速 Johnson-Lindenstrauss 変換の 2 つの次元削減手法が用意されています。通常、高次元 (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 インデックスに構築するデータには、*トレーニングチャネル*を使用します。
+ ログファイルにスコアを出力するには、*テストチャネル*を使用します。スコアはミニバッチごとに 1 行で表示され、`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` データ形式をサポートします。これら 2 つのデータ形式は冗長出力モードもサポートします。冗長出力モードでは 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-Nearest Neighbor Covertype](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/k_nearest_neighbors_covtype/k_nearest_neighbors_covtype.html)」を参照してください。

Jupyter ノートブックインスタンスを使用して、SageMaker AI の例を実行します。SageMaker AI で Jupyter ノートブックインスタンスを作成して開く方法の詳細については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。ノートブックインスタンスを作成して開いたら、**[SageMaker AI サンプル]** タブを選択して、すべての SageMaker AI サンプルのリストを表示します。「**Introduction to Amazon algorithms (Amazon アルゴリズムの概要)**」セクションで、K-Nearest Neighbor ノートブックを検索します。ノートブックを開くには、その [**Use (使用)**] タブをクリックして [**Create copy (コピーを作成)**] を選択します。

## k-NN アルゴリズムの EC2 インスタンスに関する推奨事項
<a name="kNN-instances"></a>

CPU インスタンス (ml.m5.2xlarge など) または GPU インスタンスでトレーニングすることをお勧めします。k-NN アルゴリズムは、トレーニングと推論用の P2、P3、G4dn、G5 GPU インスタンスファミリーをサポートします。

GPU ハードウェアを使用すると、CPU から GPU への通信に負担がかかるため、通常、CPU からの推論リクエストは GPU からのリクエストよりも平均レイテンシーが短くなります。ただし、GPU は一般的にバッチサイズが大きいほどスループットが高くなります。