Pas encore de compte ?
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.
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
Prédictions correctes :
Prédictions erronées :
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