Outils pour utilisateurs

Outils du site


les_programmes_a_connaitre:algorithmique_premiere:k_plus_proches

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
les_programmes_a_connaitre:algorithmique_premiere:k_plus_proches [2022/05/14 12:03]
bs
les_programmes_a_connaitre:algorithmique_premiere:k_plus_proches [2023/01/16 10:24] (Version actuelle)
fm
Ligne 4: Ligne 4:
  
 L'algorithme des k plus proches voisins appartient à la famille des algorithmes d'apprentissage automatique (machine learning). L'algorithme des k plus proches voisins appartient à la famille des algorithmes d'apprentissage automatique (machine learning).
-C'est un algorithme simple a appréhender+C'est un algorithme simple a appréhender, il permet apprentissage supervisé qui permet de classer de nouvelles données. Les GAFAM utilisent également les données concernant les utilisateurs afin de "nourrir" des algorithmes de machine learning qui permettrons à des sociétés d'en savoir toujours plus sur nous et ainsi de mieux cerner nos "besoins" en termes de consommation. Ce type d'algorithme sont par exemple utilisé pour classer différentes espèces d'arbres par exemple.
-Les apprentissages automatique ne date pas d'hier et ont connu un fort regain d'intérêt au début des années 2000notamment grâce à la quantité de données disponibles sur internet. +
-C'est un algorithme d'apprentissage supervisé qui permet de classer de nouvelles données mais qui permet également d'utiliser cet algorithme a des fins de régression (non abordé dans le programme). +
-Les GAFAM utilisent également les données concernant les utilisateurs afin de "nourrir" des algorithmes de machine learning qui permettrons à des sociétés d'en savoir toujours plus sur nous et ainsi de mieux cerner nos "besoins" en termes de consommation.+
  
 ====Principe de l'algorithme:==== ====Principe de l'algorithme:====
  
-L'algorithme des k plus proche voisins ne nécessite pas de phase d'apprentissage (à proprement parlé), il faut juste stocker le jeu de données d'apprentissage. 
-Soit un ensemble //E// contenant //n// données labelisées: //E//={(//yi//,__xi__)} avec //i// compris entre 1 et //n//, où //yi// correspond à la classe de la donnée //i// et où le vecteur //xi// de dimension //p//(//xi//=(//x1i//,//x2i//,...,//xpi//)) représente les variables prédictrices de la donnée //i//. 
-Soit une donnée //u// qui n'appartient pas à //E// et qui ne possède pas de label (//u// est uniquement caractérisée par un vecteur //xu// de dimension //p//). 
-Soit //d// une fonction qui renvoie la distance entre la donnée //u// et une donnée quelconque appartenant à //E//. 
-Soit un entier //k// inférieur ou égal à //n//. 
 Voici le principe de l'algorithme de //k// plus proches voisins: Voici le principe de l'algorithme de //k// plus proches voisins:
-   -On calcule les distances entre la donnée //u// et chaque donnée appartenant à //E// à l'aide de la fonction //d//+   -On calcule les distances entre la donnée //u// et chaque donnée appartenant au graphique
-   -On retient les //k// données du jeu de données //E// les plus proches de //u//.+   -On retient les //k// données du jeu de données les plus proches de //u//.
    -On attribue à //u// la classe qui est la plus fréquente parmi les //k// données les plus proches.    -On attribue à //u// la classe qui est la plus fréquente parmi les //k// données les plus proches.
-Il est possible d'utiliser différents types de distance si souhaité. 
  
 ====Etude d'un exemple:==== ====Etude d'un exemple:====
  
 ===Les données:=== ===Les données:===
 +
 +Comment savoir à quelle espèce appartient une pétale ?
  
 Par exemple pour un jeu de donnée s'appelant "iris de Fisher" qui est composé de 50 entrées et pour chaque entrée nous avons: Par exemple pour un jeu de donnée s'appelant "iris de Fisher" qui est composé de 50 entrées et pour chaque entrée nous avons:
-   -La longueur des sépales (en cm) 
-   -La largeur des sépales (en cm) 
    -La longueur des pétales (en cm)    -La longueur des pétales (en cm)
    -La largeur des pétales (en cm)    -La largeur des pétales (en cm)
    -L'espèce d'Iris    -L'espèce d'Iris
-Il est possible de télécharger ces données au format csv.+Il est possible de télécharger ces données au format csv :
  
-Ensuite il faut les modifier à l'aide d'un tableur: +{{:les_programmes_a_connaitre:algorithmique_premiere:nsi_prem_knn_1.png?400|}}
-   -Nous supprimons les colones qui ne nous intéresse pas afin de garder seulement celles qui nous intéresse. +
-   -Il faut égallement encoder les espèces avec des chiffres (0,1,2,...)+
  
 ===Bibliothèques Python utilisées:=== ===Bibliothèques Python utilisées:===
Ligne 149: Ligne 138:
 plt.show() plt.show()
 </code> </code>
 +
 +les éléments des tableaux x et y ayant le même indice sont regroupés dans un tuple, nous obtenons bien une liste de tuples.
 +
 +"KNeighborsClassifier" est une méthode issue de la bibliothèque scikit-learn (voir plus haut le "from sklearn.neighbors import KNeighborsClassifier"), cette méthode prend ici en paramètre le nombre de "plus proches voisins" (model = KNeighborsClassifier(n_neighbors=k))
 +
 +"model.fit(d, lab)" permet d'associer les tuples présents dans la liste "d" avec les labels (0 : "iris setosa", 1 : "iris versicolor" ou 2 : "iris virginica"). Par exemple le premier tuple de la liste "d", (1.4, 0.2) est associé au premier label de la liste lab (0), et ainsi de suite...
 +
 +La ligne "prediction= model.predict([[longueur,largeur]])" permet d'effectuer une prédiction pour un couple [longueur, largeur] (dans l'exemple ci-dessus "longueur=2.5" et "largeur=0.75"). La variable "prediction" contient alors le label trouvé par l'algorithme knn. Attention, "predection" est une liste Python qui contient un seul élément (le label), il est donc nécessaire d'écrire "predection[0]" afin d'obtenir le label.
  
 Nous obtenons le résultat suivant (FIGURE 5): Nous obtenons le résultat suivant (FIGURE 5):
les_programmes_a_connaitre/algorithmique_premiere/k_plus_proches.1652522580.txt.gz · Dernière modification: 2022/05/14 12:03 de bs