Algoritmo KNN - Trovare i vicini più vicini
introduzione
L'algoritmo K-Nearest Neighbors (KNN) è un tipo di algoritmo ML supervisionato che può essere utilizzato sia per la classificazione che per i problemi predittivi di regressione. Tuttavia, viene utilizzato principalmente per la classificazione dei problemi predittivi nell'industria. Le seguenti due proprietà definirebbero bene KNN:
Lazy learning algorithm - KNN è un algoritmo di apprendimento pigro perché non ha una fase di formazione specializzata e utilizza tutti i dati per l'addestramento durante la classificazione.
Non-parametric learning algorithm - KNN è anche un algoritmo di apprendimento non parametrico perché non presuppone nulla sui dati sottostanti.
Funzionamento dell'algoritmo KNN
L'algoritmo K-Nearest Neighbors (KNN) utilizza la "somiglianza delle caratteristiche" per prevedere i valori dei nuovi punti dati, il che significa inoltre che al nuovo punto dati verrà assegnato un valore in base a quanto strettamente corrisponde ai punti nel set di addestramento. Possiamo capire il suo funzionamento con l'aiuto dei seguenti passaggi:
Step 1- Per implementare qualsiasi algoritmo, abbiamo bisogno del set di dati. Pertanto, durante la prima fase di KNN, dobbiamo caricare i dati di addestramento e di test.
Step 2- Successivamente, dobbiamo scegliere il valore di K cioè i punti dati più vicini. K può essere qualsiasi numero intero.
Step 3 - Per ogni punto nei dati del test, eseguire le seguenti operazioni:
3.1- Calcola la distanza tra i dati del test e ogni riga di dati di allenamento con l'aiuto di uno qualsiasi dei metodi, vale a dire: distanza euclidea, Manhattan o Hamming. Il metodo più comunemente utilizzato per calcolare la distanza è euclideo.
3.2 - Ora, in base al valore della distanza, ordinali in ordine crescente.
3.3 - Successivamente, sceglierà le prime K righe dall'array ordinato.
3.4 - Ora assegnerà una classe al punto di test in base alla classe più frequente di queste righe.
Step 4 - Fine
Esempio
Quello che segue è un esempio per comprendere il concetto di K e il funzionamento dell'algoritmo KNN -
Supponiamo di avere un set di dati che può essere tracciato come segue:
Ora, dobbiamo classificare il nuovo punto dati con punto nero (al punto 60,60) in una classe blu o rossa. Assumiamo K = 3, cioè troverebbe tre punti dati più vicini. È mostrato nel diagramma successivo:
Possiamo vedere nel diagramma sopra i tre vicini più vicini al punto dati con punto nero. Tra questi tre, due di loro si trovano nella classe rossa, quindi il punto nero verrà assegnato anche nella classe rossa.
Implementazione in Python
Come sappiamo, l'algoritmo K-Nearest Neighbors (KNN) può essere utilizzato sia per la classificazione che per la regressione. Le seguenti sono le ricette in Python per utilizzare KNN come classificatore e come regressore:
KNN come classificatore
Innanzitutto, inizia con l'importazione dei pacchetti Python necessari -
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
Successivamente, scarica il set di dati iris dal suo collegamento web come segue:
path = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
Successivamente, dobbiamo assegnare i nomi delle colonne al set di dati come segue:
headernames = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'Class']
Ora, dobbiamo leggere il set di dati nel frame di dati dei panda come segue:
dataset = pd.read_csv(path, names=headernames)
dataset.head()
slno. | sepalo-lunghezza | larghezza del sepalo | lunghezza dei petali | larghezza petalo | Classe |
---|---|---|---|---|---|
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 |
La pre-elaborazione dei dati verrà eseguita con l'aiuto delle seguenti righe di script:
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 4].values
Successivamente, divideremo i dati in train e test split. Il codice seguente dividerà il set di dati in 60% di dati di addestramento e 40% di dati di test -
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)
Successivamente, il ridimensionamento dei dati verrà eseguito come segue:
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)
Quindi, addestra il modello con l'aiuto della classe KNeighborsClassifier di sklearn come segue:
from sklearn.neighbors import KNeighborsClassifier
classifier = KNeighborsClassifier(n_neighbors=8)
classifier.fit(X_train, y_train)
Finalmente dobbiamo fare previsioni. Può essere fatto con l'aiuto del seguente script:
y_pred = classifier.predict(X_test)
Quindi, stampa i risultati come segue:
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)
Produzione
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 come regressore
Innanzitutto, inizia con l'importazione dei pacchetti Python necessari -
import numpy as np
import pandas as pd
Successivamente, scarica il set di dati iris dal suo collegamento web come segue:
path = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
Successivamente, dobbiamo assegnare i nomi delle colonne al set di dati come segue:
headernames = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'Class']
Ora, dobbiamo leggere il set di dati nel frame di dati dei panda come segue:
data = pd.read_csv(url, names=headernames)
array = data.values
X = array[:,:2]
Y = array[:,2]
data.shape
output:(150, 5)
Quindi, importa KNeighborsRegressor da sklearn per adattarlo al modello -
from sklearn.neighbors import KNeighborsRegressor
knnr = KNeighborsRegressor(n_neighbors=10)
knnr.fit(X, y)
Alla fine, possiamo trovare l'MSE come segue:
print ("The MSE is:",format(np.power(y-knnr.predict(X),2).mean()))
Produzione
The MSE is: 0.12226666666666669
Pro e contro di KNN
Professionisti
È un algoritmo molto semplice da capire e interpretare.
È molto utile per i dati non lineari perché non ci sono ipotesi sui dati in questo algoritmo.
È un algoritmo versatile in quanto possiamo usarlo per la classificazione e per la regressione.
Ha un'accuratezza relativamente elevata, ma ci sono modelli di apprendimento supervisionato molto migliori di KNN.
Contro
È un algoritmo computazionalmente un po 'costoso perché memorizza tutti i dati di addestramento.
Elevata capacità di memoria richiesta rispetto ad altri algoritmi di apprendimento supervisionato.
La previsione è lenta in caso di grande N.
È molto sensibile alla scala dei dati e alle caratteristiche irrilevanti.
Applicazioni di KNN
Di seguito sono riportate alcune delle aree in cui KNN può essere applicato con successo:
Sistema bancario
KNN può essere utilizzato nel sistema bancario per prevedere il tempo in cui un individuo è idoneo per l'approvazione del prestito? Quell'individuo ha le caratteristiche simili a quello degli inadempienti?
Calcolo dei rating di credito
Gli algoritmi KNN possono essere utilizzati per trovare il rating di credito di un individuo confrontandolo con persone con tratti simili.
Politica
Con l'aiuto degli algoritmi KNN, possiamo classificare un potenziale elettore in varie classi come “Voterà”, “Non voterà”, “Voterà al 'Congresso' del partito,“ Voterà al 'BJP' del partito.
Altre aree in cui è possibile utilizzare l'algoritmo KNN sono il riconoscimento vocale, il rilevamento della scrittura a mano, il riconoscimento delle immagini e il riconoscimento video.