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:
- K auswählen: Bestimmen Sie die Anzahl der nächsten Nachbarn (K).
- Distanz berechnen: Berechnen Sie die Distanz zwischen dem neuen Objekt und jedem Objekt im Trainingssatz (z.B. euklidische Distanz).
- K nächste Nachbarn finden: Sortieren Sie die Objekte nach Distanz und wählen Sie die K nächsten aus.
- 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]}")