Ci-dessous, les différences entre deux révisions de la page.
| 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 09:44] bs |
les_programmes_a_connaitre:algorithmique_premiere:k_plus_proches [2023/01/16 10:24] (Version actuelle) fm |
||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | ====== | + | ====== Algorithme des k plus proche voisins: |
| - | ====__Introduction:__==== | + | ====Introduction:==== |
| L' | L' | ||
| - | C'est un algorithme simple a appréhender. | + | C'est un algorithme simple a appréhender, |
| - | Les apprentissages automatique ne date pas d'hier et ont connu un fort regain d' | + | |
| - | C'est un algorithme d'apprentissage supervisé qui permet de classer de nouvelles données | + | |
| - | Les GAFAM utilisent également les données concernant les utilisateurs afin de " | + | |
| - | ====__Principe | + | ====Principe |
| - | L' | ||
| - | Soit un ensemble //E// contenant //n// données labelisées: | ||
| - | Soit une donnée //u// qui n' | ||
| - | 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' | Voici le principe de l' | ||
| - | -On calcule les distances entre la donnée //u// et chaque donnée appartenant | + | -On calcule les distances entre la donnée //u// et chaque donnée appartenant |
| - | -On retient les //k// données du jeu de données | + | -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' | ||
| - | ====__Etude | + | ====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' | Par exemple pour un jeu de donnée s' | ||
| - | -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) | ||
| | | ||
| - | 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: |
| - | -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 70: | Ligne 59: | ||
| ===Utilisation de l' | ===Utilisation de l' | ||
| - | Le graphique ci dessus (FIGURE 1) montre que les 3 classes (Iris stetosa, Iris virginica, Iris versicolor) sont relativement bien séparées. | + | Le graphique ci-dessus (FIGURE 1) montre que les 3 classes (Iris stetosa, Iris virginica, Iris versicolor) sont relativement bien séparées. |
| On peut ajouter une données non labellisée n' | On peut ajouter une données non labellisée n' | ||
| Ligne 76: | Ligne 65: | ||
| FIGURE 2 - Ajout d'une donnée non labellisée | FIGURE 2 - Ajout d'une donnée non labellisée | ||
| - | Cet algorithme "__k ppv__" | + | Dans l' |
| - | Il fonctionne en deux parties, tout d'abord, il calcule la distance entre nos données recueillies | + | Dans certains cas, il est un peu plus difficile de se prononcer "au premier coup d'oeil" (FIGURE 3): |
| - | parmi les k plus proches voisins, | + | |
| - | + | {{https:// | |
| + | FIGURE 3 - Cas plus difficile | ||
| + | |||
| + | A partir de l' | ||
| + | Nous allons pour ce faire, utiliser l' | ||
| + | | ||
| + | | ||
| + | | ||
| + | -On associe à notre "Iris mystère" | ||
| + | Dans l' | ||
| + | |||
| + | {{https:// | ||
| + | FIGURE 4 - Ici les 3 plus proches voisins | ||
| + | |||
| + | Un Iris ayant une largeur | ||
| + | |||
| + | ===Utilisation de scikit-learn: | ||
| + | |||
| + | La bibliothèque Python scikit-learn propose un grand nombre d' | ||
| + | Parmi tout ces algorithmes, | ||
| + | Voici un programme Python permettant de résoudre le problème évoqué ci-dessus: | ||
| - | Exemple d' | ||
| <code python> | <code python> | ||
| import pandas | import pandas | ||
| Ligne 108: | Ligne 116: | ||
| #fin graphique | #fin graphique | ||
| - | #algo kppv | + | #algo knn |
| d=list(zip(x, | d=list(zip(x, | ||
| model = KNeighborsClassifier(n_neighbors=k) | model = KNeighborsClassifier(n_neighbors=k) | ||
| model.fit(d, | model.fit(d, | ||
| prediction= model.predict([[longueur, | prediction= model.predict([[longueur, | ||
| - | #fin algo kppv | + | #fin algo knn |
| #Affichage résultats | #Affichage résultats | ||
| txt=" | txt=" | ||
| if prediction[0]==0: | if prediction[0]==0: | ||
| - | | + | txt=txt+" |
| if prediction[0]==1: | if prediction[0]==1: | ||
| - | | + | txt=txt+" |
| if prediction[0]==2: | if prediction[0]==2: | ||
| - | | + | txt=txt+" |
| plt.text(3, | plt.text(3, | ||
| plt.text(3, | plt.text(3, | ||
| Ligne 130: | Ligne 138: | ||
| plt.show() | plt.show() | ||
| </ | </ | ||
| + | |||
| + | 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. | ||
| + | |||
| + | " | ||
| + | |||
| + | " | ||
| + | |||
| + | La ligne " | ||
| + | |||
| + | Nous obtenons le résultat suivant (FIGURE 5): | ||
| + | |||
| + | {{https:// | ||
| + | FIGURE 5 - A l'aide de scikit-learn | ||
| + | |||
| + | Il est également possible de modifier le programme ci-dessus afin d' | ||