Heim > Backend-Entwicklung > Python-Tutorial > K Klassifizierung der nächsten Nachbarn, Klassifizierung: Überwachtes maschinelles Lernen

K Klassifizierung der nächsten Nachbarn, Klassifizierung: Überwachtes maschinelles Lernen

王林
Freigeben: 2024-07-19 14:58:38
Original
855 Leute haben es durchsucht

k-Klassifizierung der nächsten Nachbarn

Definition und Zweck

Die

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.

Hauptziele:

  • Klassifizierung: Zuweisen neuer Datenpunkte zu einer der vordefinierten Klassen basierend auf der Mehrheitsstimme oder der gewichteten Stimme der nächsten Nachbarn.
  • Schätzung: Bestimmen der Wahrscheinlichkeit, dass ein Datenpunkt zu einer bestimmten Klasse gehört.
  • Beziehungen verstehen: Identifizieren, welche Datenpunkte im Merkmalsraum ähnlich sind.

So funktioniert die k-NN-Klassifizierung

1. Distanzmetrik: Der Algorithmus verwendet eine Distanzmetrik (normalerweise euklidische Distanz), um die „Nähe“ von Datenpunkten zu bestimmen.

  • Euklidischer Abstand:
    • d(p, q) = sqrt((p1 - q1)^2 + (p2 - q2)^2 + ... + (pn - qn)^2)
    • Misst den geradlinigen Abstand zwischen zwei Punkten p und q im n-dimensionalen Raum.

2. Auswahl von k: Der Parameter k gibt die Anzahl der nächsten Nachbarn an, die bei der Klassifizierungsentscheidung berücksichtigt werden sollen.

  • Kleines k: Kann zu einer Überanpassung führen, bei der das Modell zu empfindlich auf die Trainingsdaten reagiert.
  • Großes k: Kann zu einer Unteranpassung führen, bei der das Modell zu verallgemeinert ist und möglicherweise feinere Muster in den Daten übersehen.

3. Mehrheitsabstimmung: Die vorhergesagte Klasse für einen neuen Datenpunkt ist die Klasse, die unter seinen k nächsten Nachbarn am häufigsten vorkommt.

  • Mehrheitsabstimmung:
    • Zählen Sie die Anzahl der Vorkommen jeder Klasse unter den k Nachbarn.
    • Weisen Sie dem neuen Datenpunkt die Klasse mit der höchsten Anzahl zu.

4. Gewichtete Abstimmung: In einigen Fällen werden Nachbarn nach ihrer Entfernung gewichtet, wobei nähere Nachbarn mehr Einfluss auf die Klassifizierung haben.

  • Gewichtete Abstimmung:
    • Wägen Sie die Stimme jedes Nachbarn mit dem Kehrwert seiner Entfernung.
    • Summieren Sie die gewichteten Stimmen für jede Klasse.
    • Weisen Sie dem neuen Datenpunkt die Klasse mit der höchsten gewichteten Summe zu.

Schlüsselkonzepte

  1. 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.

  2. 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.

  3. 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.

  4. 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.

Beispiel für die k-Nearest Neighbors (k-NN)-Klassifizierung

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.

Beispiel für einen Python-Code

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
Nach dem Login kopieren

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))
Nach dem Login kopieren

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)
Nach dem Login kopieren

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)
Nach dem Login kopieren

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)
Nach dem Login kopieren

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))
Nach dem Login kopieren

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
Nach dem Login kopieren

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()
Nach dem Login kopieren

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:

knn classification

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!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage