KNN-Algorithmus - Finden der nächsten Nachbarn
Einführung
Der K-Nearest Neighbours (KNN) -Algorithmus ist eine Art von überwachtem ML-Algorithmus, der sowohl für Klassifizierungs- als auch für Regressionsvorhersageprobleme verwendet werden kann. Es wird jedoch hauptsächlich zur Klassifizierung von Vorhersageproblemen in der Industrie verwendet. Die folgenden zwei Eigenschaften würden KNN gut definieren -
Lazy learning algorithm - KNN ist ein fauler Lernalgorithmus, da er keine spezielle Trainingsphase hat und alle Daten für das Training während der Klassifizierung verwendet.
Non-parametric learning algorithm - KNN ist auch ein nicht parametrischer Lernalgorithmus, da er nichts über die zugrunde liegenden Daten annimmt.
Arbeitsweise des KNN-Algorithmus
Der KNN-Algorithmus (K-Nearest Neighbours) verwendet die Merkmalsähnlichkeit, um die Werte neuer Datenpunkte vorherzusagen. Dies bedeutet ferner, dass dem neuen Datenpunkt ein Wert zugewiesen wird, der darauf basiert, wie genau er mit den Punkten im Trainingssatz übereinstimmt. Wir können die Funktionsweise anhand der folgenden Schritte verstehen:
Step 1- Für die Implementierung eines Algorithmus benötigen wir einen Datensatz. Während des ersten Schritts von KNN müssen wir also sowohl die Trainings- als auch die Testdaten laden.
Step 2- Als nächstes müssen wir den Wert von K wählen, dh die nächsten Datenpunkte. K kann eine beliebige ganze Zahl sein.
Step 3 - Führen Sie für jeden Punkt in den Testdaten Folgendes aus:
3.1- Berechnen Sie den Abstand zwischen den Testdaten und jeder Zeile der Trainingsdaten mit Hilfe einer der folgenden Methoden: Euklidischer, Manhattan- oder Hamming-Abstand. Die am häufigsten verwendete Methode zur Berechnung der Entfernung ist die euklidische.
3.2 - Sortieren Sie sie nun basierend auf dem Entfernungswert in aufsteigender Reihenfolge.
3.3 - Als nächstes werden die oberen K Zeilen aus dem sortierten Array ausgewählt.
3.4 - Jetzt wird dem Testpunkt eine Klasse zugewiesen, die auf der häufigsten Klasse dieser Zeilen basiert.
Step 4 - Ende
Beispiel
Das Folgende ist ein Beispiel, um das Konzept von K und die Funktionsweise des KNN-Algorithmus zu verstehen:
Angenommen, wir haben einen Datensatz, der wie folgt dargestellt werden kann:
Jetzt müssen wir einen neuen Datenpunkt mit einem schwarzen Punkt (bei Punkt 60, 60) in eine blaue oder rote Klasse klassifizieren. Wir gehen von K = 3 aus, dh es würden drei nächstgelegene Datenpunkte gefunden. Es ist im nächsten Diagramm dargestellt -
Im obigen Diagramm sehen wir die drei nächsten Nachbarn des Datenpunkts mit einem schwarzen Punkt. Unter diesen drei liegen zwei in der roten Klasse, daher wird der schwarze Punkt auch in der roten Klasse zugeordnet.
Implementierung in Python
Wie wir wissen, kann der KNN-Algorithmus (K-Nearest Neighbours) sowohl für die Klassifizierung als auch für die Regression verwendet werden. Das Folgende sind die Rezepte in Python, um KNN sowohl als Klassifikator als auch als Regressor zu verwenden -
KNN als Klassifikator
Beginnen Sie zunächst mit dem Importieren der erforderlichen Python-Pakete.
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
Laden Sie als Nächstes den Iris-Datensatz wie folgt von seinem Weblink herunter:
path = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
Als Nächstes müssen wir dem Datensatz Spaltennamen wie folgt zuweisen:
headernames = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'Class']
Jetzt müssen wir den Datensatz des Pandas-Datenrahmens wie folgt lesen:
dataset = pd.read_csv(path, names=headernames)
dataset.head()
Sl. Nein. | Kelchblattlänge | Kelchblattbreite | Blütenblattlänge | Blütenblattbreite | Klasse |
---|---|---|---|---|---|
0 | 5.1 | 3.5 | 1.4 | 0,2 | Iris-Setosa |
1 | 4.9 | 3.0 | 1.4 | 0,2 | Iris-Setosa |
2 | 4.7 | 3.2 | 1.3 | 0,2 | Iris-Setosa |
3 | 4.6 | 3.1 | 1.5 | 0,2 | Iris-Setosa |
4 | 5.0 | 3.6 | 1.4 | 0,2 | Iris-Setosa |
Die Datenvorverarbeitung erfolgt mit Hilfe der folgenden Skriptzeilen:
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 4].values
Als nächstes werden wir die Daten in Zug- und Testaufteilung aufteilen. Der folgende Code teilt den Datensatz in 60% Trainingsdaten und 40% Testdaten auf -
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.40)
Als nächstes wird die Datenskalierung wie folgt durchgeführt:
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)
Als nächstes trainieren Sie das Modell mit Hilfe der KNeighborsClassifier-Klasse von sklearn wie folgt:
from sklearn.neighbors import KNeighborsClassifier
classifier = KNeighborsClassifier(n_neighbors=8)
classifier.fit(X_train, y_train)
Endlich müssen wir Vorhersagen treffen. Dies kann mit Hilfe des folgenden Skripts erfolgen:
y_pred = classifier.predict(X_test)
Drucken Sie als Nächstes die Ergebnisse wie folgt aus:
from sklearn.metrics import classification_report, confusion_matrix, accuracy_score
result = confusion_matrix(y_test, y_pred)
print("Confusion Matrix:")
print(result)
result1 = classification_report(y_test, y_pred)
print("Classification Report:",)
print (result1)
result2 = accuracy_score(y_test,y_pred)
print("Accuracy:",result2)
Ausgabe
Confusion Matrix:
[[21 0 0]
[ 0 16 0]
[ 0 7 16]]
Classification Report:
precision recall f1-score support
Iris-setosa 1.00 1.00 1.00 21
Iris-versicolor 0.70 1.00 0.82 16
Iris-virginica 1.00 0.70 0.82 23
micro avg 0.88 0.88 0.88 60
macro avg 0.90 0.90 0.88 60
weighted avg 0.92 0.88 0.88 60
Accuracy: 0.8833333333333333
KNN als Regressor
Beginnen Sie zunächst mit dem Importieren der erforderlichen Python-Pakete.
import numpy as np
import pandas as pd
Laden Sie als Nächstes den Iris-Datensatz wie folgt von seinem Weblink herunter:
path = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
Als Nächstes müssen wir dem Datensatz Spaltennamen wie folgt zuweisen:
headernames = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'Class']
Jetzt müssen wir den Datensatz des Pandas-Datenrahmens wie folgt lesen:
data = pd.read_csv(url, names=headernames)
array = data.values
X = array[:,:2]
Y = array[:,2]
data.shape
output:(150, 5)
Als nächstes importieren Sie KNeighborsRegressor aus sklearn, um es an das Modell anzupassen -
from sklearn.neighbors import KNeighborsRegressor
knnr = KNeighborsRegressor(n_neighbors=10)
knnr.fit(X, y)
Endlich können wir die MSE wie folgt finden -
print ("The MSE is:",format(np.power(y-knnr.predict(X),2).mean()))
Ausgabe
The MSE is: 0.12226666666666669
Vor- und Nachteile von KNN
Vorteile
Es ist sehr einfach, Algorithmen zu verstehen und zu interpretieren.
Dies ist sehr nützlich für nichtlineare Daten, da in diesem Algorithmus keine Datenannahme vorliegt.
Es ist ein vielseitiger Algorithmus, da wir ihn sowohl zur Klassifizierung als auch zur Regression verwenden können.
Es hat eine relativ hohe Genauigkeit, aber es gibt viel besser überwachte Lernmodelle als KNN.
Nachteile
Es ist ein rechenintensiver Algorithmus, da alle Trainingsdaten gespeichert werden.
Im Vergleich zu anderen überwachten Lernalgorithmen ist ein hoher Speicherbedarf erforderlich.
Die Vorhersage ist bei großen N langsam.
Es ist sehr empfindlich gegenüber dem Umfang der Daten sowie irrelevanten Merkmalen.
Anwendungen von KNN
Im Folgenden sind einige Bereiche aufgeführt, in denen KNN erfolgreich angewendet werden kann:
Bankensystem
KNN kann im Bankensystem verwendet werden, um vorherzusagen, ob eine Person für die Kreditgenehmigung geeignet ist? Hat diese Person ähnliche Eigenschaften wie die Säumigen?
Berechnung der Bonität
KNN-Algorithmen können verwendet werden, um die Bonität einer Person durch Vergleich mit Personen mit ähnlichen Merkmalen zu ermitteln.
Politik
Mit Hilfe von KNN-Algorithmen können wir einen potenziellen Wähler in verschiedene Klassen wie "Will Vote", "Will not Vote", "Will Vote to Party 'Congress" und "Will Vote to Party' BJP" einteilen.
Andere Bereiche, in denen der KNN-Algorithmus verwendet werden kann, sind Spracherkennung, Handschrifterkennung, Bilderkennung und Videoerkennung.