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:06] bs |
les_programmes_a_connaitre:algorithmique_premiere:k_plus_proches [2023/01/16 10:24] (Version actuelle) fm |
||
---|---|---|---|
Ligne 4: | Ligne 4: | ||
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 de l' | ====Principe de l' | ||
- | 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 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' | 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 95: | Ligne 84: | ||
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' |