Algorithme KNN - Recherche des voisins les plus proches

introduction

L'algorithme K-plus proche voisins (KNN) est un type d'algorithme de ML supervisé qui peut être utilisé à la fois pour les problèmes de classification et de prédiction de régression. Cependant, il est principalement utilisé pour les problèmes prédictifs de classification dans l'industrie. Les deux propriétés suivantes définiraient bien KNN -

  • Lazy learning algorithm - KNN est un algorithme d'apprentissage paresseux car il n'a pas de phase d'apprentissage spécialisée et utilise toutes les données pour l'entraînement lors de la classification.

  • Non-parametric learning algorithm - KNN est également un algorithme d'apprentissage non paramétrique car il ne suppose rien sur les données sous-jacentes.

Fonctionnement de l'algorithme KNN

L'algorithme K-plus proche voisins (KNN) utilise la `` similarité des caractéristiques '' pour prédire les valeurs des nouveaux points de données, ce qui signifie en outre que le nouveau point de données se verra attribuer une valeur en fonction de son degré de correspondance avec les points de l'ensemble d'apprentissage. Nous pouvons comprendre son fonctionnement à l'aide des étapes suivantes -

  • Step 1- Pour implémenter n'importe quel algorithme, nous avons besoin d'un ensemble de données. Ainsi, lors de la première étape de KNN, nous devons charger la formation ainsi que les données de test.

  • Step 2- Ensuite, nous devons choisir la valeur de K c'est-à-dire les points de données les plus proches. K peut être n'importe quel entier.

  • Step 3 - Pour chaque point des données de test, procédez comme suit -

    3.1- Calculez la distance entre les données de test et chaque ligne de données d'entraînement à l'aide de l'une des méthodes à savoir: distance euclidienne, Manhattan ou Hamming. La méthode la plus couramment utilisée pour calculer la distance est euclidienne.

    3.2 - Maintenant, en fonction de la valeur de la distance, triez-les par ordre croissant.

    3.3 - Ensuite, il choisira les K premières lignes du tableau trié.

    3.4 - Maintenant, il attribuera une classe au point de test en fonction de la classe la plus fréquente de ces lignes.

  • Step 4 - Fin

Exemple

Ce qui suit est un exemple pour comprendre le concept de K et le fonctionnement de l'algorithme KNN -

Supposons que nous ayons un ensemble de données qui peut être tracé comme suit -

Maintenant, nous devons classer le nouveau point de données avec un point noir (au point 60,60) en classe bleue ou rouge. Nous supposons que K = 3, c'est-à-dire qu'il trouverait trois points de données les plus proches. Il est montré dans le diagramme suivant -

Nous pouvons voir dans le diagramme ci-dessus les trois voisins les plus proches du point de données avec un point noir. Parmi ces trois, deux d'entre eux se trouvent en classe rouge, le point noir sera donc également attribué en classe rouge.

Implémentation en Python

Comme nous le savons, l'algorithme des K-plus proches voisins (KNN) peut être utilisé à la fois pour la classification et la régression. Voici les recettes en Python pour utiliser KNN comme classifieur et régresseur -

KNN comme classificateur

Tout d'abord, commencez par importer les packages Python nécessaires -

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

Ensuite, téléchargez le jeu de données iris à partir de son lien Web comme suit -

path = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"

Ensuite, nous devons attribuer des noms de colonne à l'ensemble de données comme suit -

headernames = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'Class']

Maintenant, nous devons lire l'ensemble de données dans le cadre de données pandas comme suit -

dataset = pd.read_csv(path, names=headernames)
dataset.head()
slno. longueur sépale largeur sépale pétale largeur des pétales 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

Le prétraitement des données sera effectué à l'aide des lignes de script suivantes -

X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 4].values

Ensuite, nous allons diviser les données en train et test split. Le code suivant divisera l'ensemble de données en 60% de données d'entraînement et 40% de données de 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)

Ensuite, la mise à l'échelle des données sera effectuée comme suit -

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

Ensuite, entraînez le modèle à l'aide de la classe KNeighborsClassifier de sklearn comme suit -

from sklearn.neighbors import KNeighborsClassifier
classifier = KNeighborsClassifier(n_neighbors=8)
classifier.fit(X_train, y_train)

Enfin, nous devons faire des prédictions. Cela peut être fait à l'aide du script suivant -

y_pred = classifier.predict(X_test)

Ensuite, imprimez les résultats comme suit -

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)

Production

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 comme régresseur

Tout d'abord, commencez par importer les packages Python nécessaires -

import numpy as np
import pandas as pd

Ensuite, téléchargez le jeu de données iris à partir de son lien Web comme suit -

path = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"

Ensuite, nous devons attribuer des noms de colonne à l'ensemble de données comme suit -

headernames = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'Class']

Maintenant, nous devons lire l'ensemble de données dans le cadre de données pandas comme suit -

data = pd.read_csv(url, names=headernames)
array = data.values
X = array[:,:2]
Y = array[:,2]
data.shape

output:(150, 5)

Ensuite, importez KNeighborsRegressor depuis sklearn pour l'adapter au modèle -

from sklearn.neighbors import KNeighborsRegressor
knnr = KNeighborsRegressor(n_neighbors=10)
knnr.fit(X, y)

Enfin, nous pouvons trouver le MSE comme suit -

print ("The MSE is:",format(np.power(y-knnr.predict(X),2).mean()))

Production

The MSE is: 0.12226666666666669

Avantages et inconvénients de KNN

Avantages

  • C'est un algorithme très simple à comprendre et à interpréter.

  • C'est très utile pour les données non linéaires car il n'y a aucune hypothèse sur les données dans cet algorithme.

  • C'est un algorithme polyvalent car nous pouvons l'utiliser aussi bien pour la classification que pour la régression.

  • Il a une précision relativement élevée, mais il existe de bien meilleurs modèles d'apprentissage supervisé que KNN.

Les inconvénients

  • C'est un algorithme un peu coûteux en calcul car il stocke toutes les données d'entraînement.

  • Stockage de mémoire élevé requis par rapport à d'autres algorithmes d'apprentissage supervisé.

  • La prédiction est lente en cas de grand N.

  • Il est très sensible à l'échelle des données ainsi qu'aux fonctionnalités non pertinentes.

Applications de KNN

Voici quelques-uns des domaines dans lesquels KNN peut être appliqué avec succès -

Système bancaire

KNN peut être utilisé dans le système bancaire pour prédire le temps qu'un individu est apte à l'approbation de prêt? Cet individu a-t-il des caractéristiques similaires à celles des défaillants?

Calcul des cotes de crédit

Les algorithmes KNN peuvent être utilisés pour trouver la cote de crédit d'un individu en comparant avec les personnes ayant des traits similaires.

Politique

Avec l'aide des algorithmes KNN, nous pouvons classer un électeur potentiel en différentes classes telles que «votera», «ne votera pas», «votera pour le« congrès »du parti,« votera pour le parti «BJP».

D'autres domaines dans lesquels l'algorithme KNN peut être utilisé sont la reconnaissance vocale, la détection d'écriture manuscrite, la reconnaissance d'image et la reconnaissance vidéo.