K-Nearest Neighbors

K-Nearest Neighbors (KNN) ist ein einfacher, aber leistungsfähiger Machine-Learning-Algorithmus, der sowohl zur Klassifikation als auch zur Regression verwendet werden kann. Der Algorithmus basiert auf der Idee, dass ähnliche Datenpunkte im Raum der Merkmale auch ähnliche Zielvariablen haben werden.

Das Konzept von KNN ist einfach: Der Algorithmus klassifiziert einen Datenpunkt, indem er die K nächsten Nachbarn dieses Punktes identifiziert und die Mehrheit ihrer Klassenzugehörigkeit berechnet. Das bedeutet, dass KNN eine Instanz-basierte Methode ist, bei der das Modell während des Trainings keine Zusammenfassung der Daten lernt, sondern einfach die Trainingsdaten speichert, um später Vorhersagen zu treffen.

K-Nächste Nachbarn in einer zweidimensionalen Punktmenge mit k=1 (dunkelblau) und k=5 (hellblau). Der Radius der Kreise ist nicht festgelegt.

In diesem Beitrag werden wir KNN im Kontext der Klassifikation erklären und die Implementierung in Python erläutern.

Schritt 1: Laden der Daten und Vorbereitung Der erste Schritt bei der Implementierung von KNN besteht darin, die Daten zu laden und vorzubereiten. Wir verwenden den Iris-Datensatz als Beispiel. Der Datensatz besteht aus 150 Blumen, von denen jede 4 Merkmale (Länge und Breite von Kelch- und Kronblättern) aufweist und in 3 Klassen unterteilt ist.

from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
y = iris.target

Schritt 2: Aufteilung der Daten in Trainings- und Testsets Als nächstes teilen wir die Daten in Trainings- und Testsets auf. Wir verwenden 70% der Daten für das Training und 30% für das Testen.

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

Schritt 3: Skalieren der Daten Da KNN ein Abstandsmaß verwendet, ist es wichtig, dass alle Merkmale auf den gleichen Skalen liegen. Wir skalieren die Daten, um sicherzustellen, dass die Merkmale auf die gleiche Weise beitragen.

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

Schritt 4: Trainieren des KNN-Klassifikators Als nächstes trainieren wir den KNN-Klassifikator mit den Trainingsdaten. Wir verwenden die KNeighborsClassifier-Klasse aus der Scikit-learn-Bibliothek und setzen den Parameter n_neighbors auf die Anzahl der nächsten Nachbarn, die wir berücksichtigen möchten.

from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)

Schritt 5: Vorhersagen treffen und Modellleistung bewerten Nachdem wir den KNN-Klassifikator trainiert haben, können wir Vorhersagen für das Testset treffen und die Leistung des Modells bewerten.

from sklearn.metrics import accuracy_score
y_pred = knn.predict(X_test)
print("Accuracy:", accuracy_score(y_test, y_pred))

Das accuracy_score-Modul berechnet die Genauigkeit des Modells und gibt sie als Dezimalzahl zwischen 0 und 1 zurück.

Schritt 6: Hyperparameter-Optimierung Wie bei jedem Machine-Learning-Algorithmus ist es wichtig, die Hyperparameter zu optimieren, um die Leistung des Modells zu verbessern. Der wichtigste Hyperparameter bei KNN ist die Anzahl der nächsten Nachbarn (n_neighbors), die berücksichtigt werden sollen. Eine höhere Anzahl von Nachbarn führt zu einem glatteren Entscheidungsraum, während eine niedrigere Anzahl von Nachbarn zu einem komplexeren Entscheidungsraum führt.

Wir können eine Schleife verwenden, um verschiedene Werte für n_neighbors auszuprobieren und die Leistung des Modells zu evaluieren.

from sklearn.model_selection import GridSearchCV
params = {'n_neighbors': [3, 5, 7, 9, 11]}
knn = KNeighborsClassifier()
grid = GridSearchCV(knn, params, cv=5)
grid.fit(X_train, y_train)
print("Best Parameters:", grid.best_params_)
print("Accuracy:", grid.best_score_)

In diesem Beispiel verwenden wir die GridSearchCV-Funktion aus der Scikit-learn-Bibliothek, um verschiedene Werte für n_neighbors auszuprobieren und die beste Kombination von Hyperparametern zu finden. Die cv-Parameter gibt an, wie viele Folds für die Kreuzvalidierung verwendet werden sollen.

Schritt 7: Vorhersagen treffen mit optimierten Hyperparametern Nachdem wir die besten Hyperparameter gefunden haben, können wir den KNN-Klassifikator erneut trainieren und Vorhersagen für das Testset treffen.

knn = KNeighborsClassifier(n_neighbors=7)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
print("Accuracy:", accuracy_score(y_test, y_pred))

Das ist eine grundlegende Implementierung von K-Nearest Neighbors in Python. Beachten Sie, dass es viele andere Möglichkeiten gibt, den Algorithmus anzupassen und zu erweitern, um eine bessere Vorhersagegenauigkeit zu erzielen.