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 10:03] 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 91: | Ligne 80: | ||
| {{https:// | {{https:// | ||
| - | FIGURE 4 - 3 plus proches voisins | + | FIGURE 4 - Ici les 3 plus proches voisins |
| Un Iris ayant une largeur de pétale égale à 0.75 cm et une longueur de pétale égale à 2.5 cm a une " | Un Iris ayant une largeur de pétale égale à 0.75 cm et une longueur de pétale égale à 2.5 cm a une " | ||
| + | ===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: | ||
| - | Cet algorithme "__k ppv__" (en anglais "k nearest neighbors" | ||
| - | Il fonctionne en deux parties, tout d' | ||
| - | parmi les k plus proches voisins, on détermine quel est le groupe de données majoritaires. | ||
| - | | ||
| - | |||
| - | Exemple d' | ||
| <code python> | <code python> | ||
| import pandas | import pandas | ||
| Ligne 129: | 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 151: | 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' | ||