Logo elodees  elodees

Une IA bien-veillante pour un monde meilleur













Seuls les caractères alphabétiques accentués ou non ainsi que l'espace sont acceptés

Logo IA




Algorithme de classification KNN





Pas encore de compte ?

Inscrivez-vous pour accéder à tous les contenus




L'algorithme KNN (K-plus proche voisin) suppose que les éléments similaires les uns aux autres sont proches les uns des autres.

L'algorithme KNN vise à prédire la bonne classe pour les données de test en calculant la distance entre les données de test et tous les points d'apprentissage.

L'algorithme KNN calcule la probabilité que les données de test appartiennent à chacune des classes de données d'apprentissage "K", puis choisit la classe avec la probabilité la plus élevée.

Ensuite, il sélectionne le nombre K de points les plus proches des données de test.

Dans l'algorithme KNN, les voisins les plus proches sont les points de données avec la distance la plus courte dans l'espace des caractéristiques à partir du nouveau point de données.

Le K représente le nombre de points de données que nous considérons dans notre implémentation d'algorithme.

En conséquence, l'algorithme KNN a deux facteurs clés :

- La métrique de distance.

- La valeur K.

La distance euclidienne est la mesure de distance la plus populaire utilisée dans l'algorithme KNN.



Image gratuite et libre de droits fournie par pexel.com




Entraîner un jeu de données d’entraînement avec le modèle k-NN



Testé sous Anaconda et Python 3.7

# -*- coding: utf-8 -*-
"""
Created on Thu Jun 23 13:45:09 2022
 
@author: https://openclassrooms.com/fr/courses/4011851-initiez-vous-au-machine-learning/4022441-entrainez-votre-premier-k-nn
"""
import numpy as np
from matplotlib import pyplot as plt
from sklearn.datasets import fetch_openml
mnist = fetch_openml('mnist_784', version=1)
 
# Le dataset principal qui contient toutes les images
print (mnist.data.shape)
 
# Le vecteur d'annotations associé au dataset (nombre entre 0 et 9)
print (mnist.target.shape)
 
sample = np.random.randint(70000, size=5000)
data = mnist.data.values[sample]
target = mnist.target.values[sample]
 
from sklearn.model_selection import train_test_split
 
xtrain, xtest, ytrain, ytest = train_test_split(data, target, train_size=0.8)
 
from sklearn import neighbors
 
knn = neighbors.KNeighborsClassifier(n_neighbors=3)
knn.fit(xtrain, ytrain)
 
error = 1 - knn.score(xtest, ytest)
print('Erreur: %f' % error)
 
errors = []
for k in range(2,15):
    knn = neighbors.KNeighborsClassifier(k)
    errors.append(100*(1 - knn.fit(xtrain, ytrain).score(xtest, ytest)))
plt.plot(range(2,15), errors, 'o-')
plt.show()
 
# On récupère le classifieur le plus performant
knn = neighbors.KNeighborsClassifier(4)
knn.fit(xtrain, ytrain)
 
# On récupère les prédictions sur les données test
predicted = knn.predict(xtest)
 
# On redimensionne les données sous forme d'images
images = xtest.reshape((-1, 28, 28))
 
# On selectionne un echantillon de 12 images au hasard
select = np.random.randint(images.shape[0], size=12)
 
# On affiche les images avec la prédiction associée
fig,ax = plt.subplots(3,4)
 
for index, value in enumerate(select):
    plt.subplot(3,4,index+1)
    plt.axis('off')
    plt.imshow(images[value],cmap=plt.cm.gray_r,interpolation="nearest")
    plt.title('Predicted: {}'.format( predicted[value]) )
 
plt.show()
 
# on récupère les données mal prédites 
misclass = (ytest != predicted)
misclass_images = images[misclass,:,:]
misclass_predicted = predicted[misclass]
 
# on sélectionne un échantillon de ces images
select = np.random.randint(misclass_images.shape[0], size=12)
 
# on affiche les images et les prédictions (erronées) associées à ces images
for index, value in enumerate(select):
    plt.subplot(3,4,index+1)
    plt.axis('off')
    plt.imshow(misclass_images[value],cmap=plt.cm.gray_r,interpolation="nearest")
    plt.title('Predicted: {}'.format(misclass_predicted[value]) )
 
plt.show()
 
 


L'erreur en pourcentage pour les différents classifieurs

Image gratuite et libre de droits fournie par pexel.com



Prédictions correctes :

Image gratuite et libre de droits fournie par pexel.com

Prédictions erronées :

Image gratuite et libre de droits fournie par pexel.com




Apprentissage profond

Apprentissage automatique










Bienvenu, je m’appelle Eric Soupet et je suis l'administrateur du site elodees.com. elodees.com est un état de l'art de l'Intelligence Artificielle et se veut collaboratif, vous pouvez dès à présent proposer du contenu tels que des articles, des événements, des tutoriels, ... alors n'hésitez pas !

Crédit des images de la plate-forme : Pixabay - Pixabay License | Pexels - Pexels License