

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.

# So funktioniert der k-NN-Algorithmus
<a name="kNN_how-it-works"></a>

Der Amazon SageMaker AI-Algorithmus k-Nearest Neighbors (k-NN) folgt einem mehrstufigen Trainingsprozess, der die Stichprobenerhebung der Eingabedaten, die Dimensionsreduzierung und die Erstellung eines Index umfasst. Die indizierten Daten werden dann während der Inferenz verwendet, um effizient die k-nächsten Nachbarn für einen bestimmten Datenpunkt zu finden und Vorhersagen auf der Grundlage der benachbarten Bezeichnungen oder Werte zu treffen.

## Schritt 1: Stichprobe
<a name="step1-k-NN-sampling"></a>

Verwenden Sie den `sample_size`-Parameter, um die Gesamtanzahl der Datenpunkte anzugeben, die als Stichprobe vom Trainingsdatensatz genommen werden sollen. Beispiel: Wenn der erste Datensatz über 1 000 Datenpunkte verfügt und `sample_size` auf 100 festgelegt ist, wobei die Gesamtanzahl der Instances 2 beträgt, nimmt jeder Worker Stichproben von 50 Punkten. Es würde eine Reihe von insgesamt 100 Datenpunkten erfasst werden. Die Stichprobenerfassung erfolgt in linearer Zeit in Bezug auf die Anzahl der Datenpunkte. 

## Schritt 2: Ausführen der Dimensionsreduzierung
<a name="step2-kNN-dim-reduction"></a>

Die aktuelle Implementierung des k-NN-Algorithmus verfügt über zwei Methoden der Dimensionsreduzierung. Sie geben die Methode im `dimension_reduction_type`-Hyperparameter an. Die `sign`-Methode gibt eine zufällige Projektion an, die eine lineare Projektion mithilfe einer Matrix von zufälligen Zeichen verwendet. Die `fjlt`-Methode gibt eine schnelle Johnson-Lindenstrauss-Transformation an, eine Methode auf der Grundlage der Fourier-Transformation. Beide Methoden bewahren die L2- und inneren Produktentfernungen. Die `fjlt`-Methode sollte verwendet werden, wenn die Zieldimension groß ist, und bietet eine bessere Leistung mit CPU-Inferenzen. Die Methoden unterscheiden sich in ihren Rechenkomplexitä. Die `sign`-Methode erfordert O(ndk)-Zeit, um die Dimension eines Stapels von n Punkten der Dimension d auf eine Ziel-Dimension k zu reduzieren. Die `fjlt`-Methode erfordert O(nd log(d)) Zeit, doch die beteiligten Konstanten sind größer. Durch die Dimensionsreduzierung werden die Daten verzerrt, wodurch sich die Prognosegenauigkeit verringern kann.

## Schritt 3: Erstellen eines Index
<a name="step3-kNN-build-index"></a>

Während der Inferenz fragt der Algorithmus den Index für einen Stichprobenpunkt ab k-nearest-neighbors. Basierend auf den Verweisen auf die Punkte nimmt der Algorithmus die Klassifizierungs- oder Regressionsprognose vor. Seine Prognose basiert auf den bereitgestellten Klassenbezeichnungen oder Werten. k-NN bietet drei verschiedene Arten von Indizes: einen flachen Index, einen umgekehrten Index und einen umgekehrten Index mit Produktquantisierung. Sie geben den Typ mit dem `index_type`-Parameter an.

## Serialisieren des Modells
<a name="kNN-model-serialization"></a>

Wenn der k-NN-Algorithmus Trainings abgeschlossen hat, serialisiert er drei Dateien zur Vorbereitung der Inferenz. 
+ model\$1algo-1: Enthält den serialisierten Index zur Berechnung der nächsten Nachbarn.
+ model\$1alg-1.labels: Enthält serialisierte Bezeichnungen (np.float32-Binärformat) zum Berechnen der prognostizierten Bezeichnung basierend auf dem Abfrageergebnis aus dem Index.
+ model\$1algo-1.json: Enthält die Modellmetadaten im JSON-Format, in dem die – `k`und `predictor_type`-Hyperparameter aus den Trainings für Inferenz zusammen mit anderen relevanten Zuständen gespeichert werden.

Mit der aktuellen Implementierung von k-NN können Sie die Metadatendatei ändern, um die Art zu ändern, wie Prognosen berechnet werden. So können Sie z. B. `k` in 10 oder `predictor_type` in *regressor* ändern.

```
{
  "k": 5,
  "predictor_type": "classifier",
  "dimension_reduction": {"type": "sign", "seed": 3, "target_dim": 10, "input_dim": 20},
  "normalize": False,
  "version": "1.0"
}
```