k-Nearest Neighbors (k-NN)-Klassifizierung ist ein nichtparametrischer, instanzbasierter Lernalgorithmus, der beim maschinellen Lernen verwendet wird, um Datenpunkte basierend auf den Klassen ihrer nächsten Nachbarn im Merkmalsraum zu klassifizieren . Es weist einem Datenpunkt eine Klasse zu, indem es die Klassen seiner k nächsten Nachbarn berücksichtigt. Der Hauptzweck der k-NN-Klassifizierung besteht darin, die Klasse neuer Datenpunkte vorherzusagen, indem die Ähnlichkeit mit vorhandenen gekennzeichneten Daten genutzt wird.
1. Distanzmetrik: Der Algorithmus verwendet eine Distanzmetrik (normalerweise euklidische Distanz), um die „Nähe“ von Datenpunkten zu bestimmen.
2. Auswahl von k: Der Parameter k gibt die Anzahl der nächsten Nachbarn an, die bei der Klassifizierungsentscheidung berücksichtigt werden sollen.
3. Mehrheitsabstimmung: Die vorhergesagte Klasse für einen neuen Datenpunkt ist die Klasse, die unter seinen k nächsten Nachbarn am häufigsten vorkommt.
4. Gewichtete Abstimmung: In einigen Fällen werden Nachbarn nach ihrer Entfernung gewichtet, wobei nähere Nachbarn mehr Einfluss auf die Klassifizierung haben.
Nichtparametrisch: k-NN ist eine nichtparametrische Methode, das heißt, sie macht keine Annahmen über die zugrunde liegende Verteilung der Daten. Dadurch ist es flexibel im Umgang mit verschiedenen Datentypen.
Instanzbasiertes Lernen: Der Algorithmus speichert den gesamten Trainingsdatensatz und trifft Vorhersagen basierend auf den lokalen Mustern in den Daten. Er wird auch als „fauler“ Lernalgorithmus bezeichnet, da er die Verarbeitung verzögert, bis eine Abfrage erfolgt.
Entfernungsberechnung: Die Wahl der Entfernungsmetrik kann die Leistung des Modells erheblich beeinflussen. Zu den gängigen Maßen gehören Euklidische, Manhattan- und Minkowski-Entfernungen.
Wahl von k: Der Wert von k ist ein kritischer Hyperparameter. Kreuzvalidierung wird häufig verwendet, um den optimalen Wert von k für einen bestimmten Datensatz zu bestimmen.
k-Nearest Neighbors (k-NN)-Klassifizierung ist ein nichtparametrischer, instanzbasierter Lernalgorithmus, der zur Klassifizierung von Datenpunkten basierend auf den Klassen ihrer nächsten Nachbarn verwendet wird. Dieses Beispiel zeigt, wie k-NN für die Klassifizierung mehrerer Klassen mithilfe synthetischer Daten implementiert, die Leistung des Modells bewertet und die Entscheidungsgrenze für drei Klassen visualisiert wird.
1. Bibliotheken importieren
import numpy as np import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import accuracy_score, classification_report
Dieser Block importiert die notwendigen Bibliotheken für Datenmanipulation, Darstellung und maschinelles Lernen.
2. Generieren Sie Beispieldaten mit 3 Klassen
np.random.seed(42) # For reproducibility n_samples = 300 # Class 0: Cluster at the top-left corner X0 = np.random.randn(n_samples // 3, 2) * 0.5 + [-2, 2] # Class 1: Cluster at the top-right corner X1 = np.random.randn(n_samples // 3, 2) * 0.5 + [2, 2] # Class 2: Cluster at the bottom-center X2 = np.random.randn(n_samples // 3, 2) * 0.5 + [0, -2] # Combine all classes X = np.vstack((X0, X1, X2)) y = np.array([0] * (n_samples // 3) + [1] * (n_samples // 3) + [2] * (n_samples // 3))
Dieser Block generiert synthetische Daten für drei Klassen, die sich in verschiedenen Regionen des Feature-Space befinden.
3. Teilen Sie den Datensatz auf
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
Dieser Block teilt den Datensatz zur Modellbewertung in Trainings- und Testsätze auf.
4. Erstellen und trainieren Sie den k-NN-Klassifikator
k = 5 # Number of neighbors knn_classifier = KNeighborsClassifier(n_neighbors=k) knn_classifier.fit(X_train, y_train)
Dieser Block initialisiert den k-NN-Klassifikator mit der angegebenen Anzahl von Nachbarn und trainiert ihn mithilfe des Trainingsdatensatzes.
5. Machen Sie Vorhersagen
y_pred = knn_classifier.predict(X_test)
Dieser Block verwendet das trainierte Modell, um Vorhersagen zum Testsatz zu treffen.
6. Evaluate the Model
accuracy = accuracy_score(y_test, y_pred) print(f"Accuracy: {accuracy:.2f}") print("\nClassification Report:") print(classification_report(y_test, y_pred))
Output:
Accuracy: 1.00 Classification Report: precision recall f1-score support 0 1.00 1.00 1.00 22 1 1.00 1.00 1.00 16 2 1.00 1.00 1.00 22 accuracy 1.00 60 macro avg 1.00 1.00 1.00 60 weighted avg 1.00 1.00 1.00 60
This block calculates and prints the accuracy and classification report, providing insights into the model's performance.
7. Visualize the Decision Boundary
h = 0.02 # Step size in the mesh x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1 y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1 xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h)) Z = knn_classifier.predict(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape) plt.figure(figsize=(12, 8)) plt.contourf(xx, yy, Z, cmap=plt.cm.RdYlBu, alpha=0.8) plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.RdYlBu, edgecolors='black') plt.xlabel('Feature 1') plt.ylabel('Feature 2') plt.title(f'k-NN Classification (k={k})') plt.colorbar() plt.show()
This block visualizes the decision boundaries created by the k-NN classifier, illustrating how the model separates the three classes in the feature space.
Output:
This structured approach demonstrates how to implement and evaluate k-NN for multiclass classification tasks, providing a clear understanding of its capabilities and the effectiveness of visualizing decision boundaries.
Das obige ist der detaillierte Inhalt vonK Klassifizierung der nächsten Nachbarn, Klassifizierung: Überwachtes maschinelles Lernen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!