

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 Stichprobennahme 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 spezifiziert eine Zufallsprojektion, bei der eine lineare Projektion unter Verwendung einer Matrix von Zufallszeichen verwendet wird, und die `fjlt` Methode spezifiziert eine schnelle Johnson-Lindenstrauss Transformation, eine Methode, die auf der Fourier-Transformation basiert. 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 nach den k-nearest-neighbors eines Stichprobenpunkts ab. 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\_algo-1: Enthält den serialisierten Index zur Berechnung der nächsten Nachbarn.
+ model\_alg-1.labels: Enthält serialisierte Bezeichnungen (np.float32-Binärformat) zum Berechnen der prognostizierten Bezeichnung basierend auf dem Abfrageergebnis aus dem Index.
+ model\_algo-1.json: Enthält die JSON-formatted Modell-Metadaten, in denen die Parameter `k` und `predictor_type` Hyperparameter aus dem Training für die 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"
}
```