

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# K-nearest neighbors (k-NN)-Algorithmus
<a name="k-nearest-neighbors"></a>

Der Amazon SageMaker AI-Algorithmus für k-Nearest Neighbors (k-NN) ist ein indexbasierter Algorithmus. Er verwendet eine nicht parametrische Methode zur Klassifizierung oder Regression. Bei Klassifizierungsproblemen fragt der Algorithmus die *k*-Punkte ab, die dem Stichprobenpunkt am nächsten liegen, und gibt die am häufigsten verwendeten Bezeichnungen ihrer Klasse als prognostizierte Bezeichnung zurück. Bei Regressionsproblemen fragt der Algorithmus die *k*-Punkte ab, die dem Stichprobenpunkt am nächsten liegen, und gibt den Durchschnitt ihrer Funktionswerte als prognostizierten Wert zurück. 

Das Training mit dem k-NN-Algorithmus umfasst drei Schritte: Sampling, Dimensionsreduzierung und Indexerstellung. Durch Sampling wird die Größe des anfänglichen Datensatzes reduziert, sodass es in den Arbeitsspeicher passt. Für die Dimensionsreduzierung verringert der Algorithmus die Funktionsdimension der Daten, um den Ressourcenbedarf des k-NN-Modells im Speicher und die Inferenzlatenz zu senken. Wir stellen zwei-Methoden der Dimensionsreduzierung zur Verfügung: zufällige Projektion und die schnelle Johnson-Lindenstrauss-Transformation. In der Regel verwenden Sie die Dimensionsreduzierung für hochdimensionale Datensätze (d > 1000), um die Nachteile der Dimensionalität zu vermeiden, die die statistische Analyse von Daten beeinträchtigt, deren Dichte mit steigender Dimensionalität geringer wird. Das Hauptziel des k-NN-Trainings ist die Erstellung des Index. Der Index ermöglicht ein effizientes Suchen von Entfernungen zwischen Punkten, deren Werte oder Klassenbezeichnungen noch nicht festgelegt wurden, und den k nächstgelegenen Punkten zur Inferenz.

**Topics**
+ [E/A-Schnittstelle für den k-NN-Algorithmus](#kNN-input_output)
+ [k-NN-Beispiel-Notebooks](#kNN-sample-notebooks)
+ [So funktioniert der k-NN-Algorithmus](kNN_how-it-works.md)
+ [EC2-Instance-Empfehlung für den k-NN-Algorithmus](#kNN-instances)
+ [k-NN-Hyperparameter](kNN_hyperparameters.md)
+ [Optimieren eines k-NN-Modells](kNN-tuning.md)
+ [Datenformate für k-NN-Trainingseingaben](kNN-in-formats.md)
+ [k-NN-Anforderungs- und Antwortformate](kNN-inference-formats.md)

## E/A-Schnittstelle für den k-NN-Algorithmus
<a name="kNN-input_output"></a>

SageMaker AI k-NN unterstützt Train- und Testdatenkanäle.
+ Verwenden Sie einen *Trainingskanal* für Daten, die Sie als Stichproben erfassen und in den die k-NN-Index einbauen möchten.
+ Verwenden Sie ein *Testkanal,* um Punktzahlen in Protokolldateien auszugeben. Punktzahlen werden als eine Zeile pro Mini-Stapel aufgeführt: Genauigkeit für `classifier`, mittlerer quadratischer Fehler (MSE) für `regressor` für die Punktzahl.

Für Trainingseingaben unterstützt k-NN – `text/csv`und `application/x-recordio-protobuf`-Datenformate. Für den Eingabetyp `text/csv` werden die ersten `label_size` Spalten als Bezeichnungsvektor für diese Zeile interpretiert. Sie können entweder den Datei- oder den Pipe-Modus verwenden, um Modelle mit Daten, die als `recordIO-wrapped-protobuf` oder `CSV` formatiert sind, zu trainieren.

Für Inferenzeingaben unterstützt k-NN die `application/json`-, – `application/x-recordio-protobuf`und `text/csv`-Datenformate. Das `text/csv`-Format akzeptiert eine `label_size` und einen Codierungsparameter. Es setzt eine `label_size` von 0 und eine UTF-8-Codierung voraus.

Für Inferenzausgaben unterstützt k-NN die – `application/json`und `application/x-recordio-protobuf`-Datenformate. Diese beiden Datenformate unterstützen auch einen Verbose-Ausgabemodus. Im Verbose-Ausgabemodus stellt die API die Suchergebnisse mit dem Entfernungsvektor aufsteigend sortiert und die entsprechenden Elemente im Bezeichnungsvektor bereit.

Für die Stapeltransformation unterstützt k-NN das `application/jsonlines`-Datenformat für die Ein- und Ausgabe. Die Eingabe lautet z. B.:

```
content-type: application/jsonlines

{"features": [1.5, 16.0, 14.0, 23.0]}
{"data": {"features": {"values": [1.5, 16.0, 14.0, 23.0]}}
```

Die Ausgabe lautet z. B.:

```
accept: application/jsonlines

{"predicted_label": 0.0}
{"predicted_label": 2.0}
```

Weitere Informationen zu den Ein- und Ausgabedateiformaten finden Sie unter [Datenformate für k-NN-Trainingseingaben](kNN-in-formats.md) für das Training, [k-NN-Anforderungs- und Antwortformate](kNN-inference-formats.md) für Inferenz und [k-NN-Beispiel-Notebooks](#kNN-sample-notebooks).

## k-NN-Beispiel-Notebooks
<a name="kNN-sample-notebooks"></a>

Ein Beispiel für ein Notizbuch, das den SageMaker KI-Algorithmus k-Nearest Neighbor verwendet, um anhand von geologischen Daten und forstwirtschaftlichen Daten die Art der Wildnisbedeckung vorherzusagen, finden Sie unter [K-Nearest Neighbor](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/k_nearest_neighbors_covtype/k_nearest_neighbors_covtype.html) Covertype. 

Verwenden Sie eine Jupyter-Notebook-Instanz, um das Beispiel in KI auszuführen. SageMaker Informationen zum Erstellen und Öffnen einer Jupyter-Notebook-Instanz in KI finden Sie unter. SageMaker [SageMaker Amazon-Notebook-Instanzen](nbi.md) Nachdem Sie eine Notebook-Instanz erstellt und geöffnet haben, wählen Sie den Tab **SageMaker KI-Beispiele** aus, um eine Liste aller SageMaker KI-Beispiel-Notebooks anzuzeigen. Suchen Sie nach K-Nearest Neighbor Notebooks im Abschnitt **Einführung in Amazon-Algorithmen**. Zum Öffnen eines Notebooks klicken Sie auf die Registerkarte **Use (Verwenden)** und wählen Sie **Create copy (Kopie erstellen)** aus.

## EC2-Instance-Empfehlung für den k-NN-Algorithmus
<a name="kNN-instances"></a>

Wir empfehlen, auf einer CPU-Instance (wie ml.m5.2xlarge) oder auf einer GPU-Instance zu trainieren. Der k-NN-Algorithmus unterstützt die GPU-Instancefamilien P2, P3, G4dn und G5 für Training und Inferenz.

Inferenzanfragen von haben CPUs im Allgemeinen eine geringere durchschnittliche Latenz als Anfragen von, GPUs da bei Verwendung von GPU-Hardware eine CPU-to-GPU Belastung der Kommunikation anfällt. GPUs Im Allgemeinen weisen sie jedoch bei größeren Batches einen höheren Durchsatz auf.