Sobes.tech
Middle

Was ist der k-nächste Nachbarn Algorithmus (kNN)?

sobes.tech KI

Antwort von AI

Der Algorithmus der k nächsten Nachbarn (kNN) ist ein einfacher, nichtparametrischer Algorithmus des maschinellen Lernens, der sowohl für Klassifikation als auch für Regression verwendet wird.

Grundprinzip: Weist ein neues Objekt (Datenpunkt) der Klasse zu, die unter den k nächsten Nachbarn im Trainingssatz am häufigsten vertreten ist. Für Regressionen sagt er einen Wert voraus, der dem Durchschnitt/Median der Werte der k nächsten Nachbarn entspricht.

Wichtigste Schritte für die Klassifikation:

  1. K auswählen: Bestimmen Sie die Anzahl der nächsten Nachbarn (K).
  2. Distanz berechnen: Berechnen Sie die Distanz zwischen dem neuen Objekt und jedem Objekt im Trainingssatz (z.B. euklidische Distanz).
  3. K nächste Nachbarn finden: Sortieren Sie die Objekte nach Distanz und wählen Sie die K nächsten aus.
  4. Abstimmung: Bestimmen Sie die Klasse des neuen Objekts basierend auf der Mehrheitsabstimmung unter den K nächsten Nachbarn.

Vorteile:

  • Einfache Implementierung und Verständnis.
  • Erfordert kein Modelltraining (fauler Algorithmus).
  • Passt sich neuen Daten an, sobald sie erscheinen.

Nachteile:

  • Rechenintensiv bei großen Datenmengen (bei der Vorhersagephase).
  • Die Wahl von K und der Distanzmetrik ist kritisch.
  • Empfindlich gegenüber Merkmalsskalen und der "Fluch der Dimensionalität".
  • Funktioniert nicht gut direkt mit kategorialen Merkmalen (erfordert Kodierung).

Anwendungen:

  • Mustererkennung.
  • Empfehlungssysteme.
  • Medizinische Diagnostik.
  • Suche nach ähnlichen Dokumenten.
# Beispiel für die Implementierung von kNN für die Klassifikation mit scikit-learn

from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import numpy as np

# Erstellen von Demonstrationsdaten
X = np.array([[1, 2], [1.5, 1.8], [5, 8], [8, 8], [1, 0.6], [9, 11]])
y = np.array([0, 0, 1, 1, 0, 1]) # Klassenlabels

# Aufteilen der Daten in Trainings- und Testset
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Erstellen und Trainieren des kNN-Modells
# K=3, also 3 nächste Nachbarn
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)

# Vorhersage auf dem Testset
y_pred = knn.predict(X_test)

# Genauigkeit bewerten
accuracy = accuracy_score(y_test, y_pred)
# print(f"Modellgenauigkeit: {accuracy}")

# Vorhersage für einen neuen Punkt
new_point = np.array([[3, 5]])
predicted_class = knn.predict(new_point)
# print(f"Vorhergesagte Klasse für den neuen Punkt: {predicted_class[0]}")