On cherche à prédire l’alignement (héro ou vilain) d’un personnage mystère
rencontré pour la première fois dans un Comics. Son nom et son alignement
(héro ou vilain) sont encore inconnus, mais il y est malgré tout décrit comme
ayant une taille de 190 cm pour un poids de 95 kg.
On dispose également des données suivantes:
Nom
Taille
Poids
Alignement
Ajax
193
90
vilain
Black Adam
191
113
vilain
Blade
188
97
héro
Firelord
193
99
héro
Franklin Storm
188
92
héro
Gambit
185
81
héro
Havok
183
79
héro
Lex Luthor
188
95
vilain
Mandarin
188
97
vilain
Professor Zoom
180
81
vilain
On place ces données dans un repère.
Bokeh Plot
Dans la suite, nous allons considérer la distance euclidienne
normalisée définie comme suit:
\(\text{dist}(A, B) = \sqrt{(\dfrac{x_B-x_A}{\text{max}(x_i)-\text{min}(x_i)})^2 +
(\dfrac{y_B-y_A}{\text{max}(y_i)-\text{min}(y_i)})^2}\) dans un plan orthonormé.
Remarques:
Cette distance a un sens puisque les \(x_i\) (respectivement les \(y_i\))
ne sont pas tous égaux dans leur ensemble.
Vous vous posez peut être la question pourquoi ne pas prendre
simplement la distance euclidienne et pourquoi diable diviser chacun des termes.
Les tailles (les \(x_i\)) vont de \(180\) à \(193\) d’où un
écartement égal à \(193-180=13\), tandis que les poids
sont compris entre \(79\) et \(113\) soit un écartement égal à \(34\).
L’écartement des poids étant plus important que celui de la taille (avec un
facteur de presque 3), il en découlerait que choisir la simple distance
euclidienne reviendrait à donner d’avantage d’importance au poids qu’à la
taille. Le fait de normaliser permet de ne pas privilégier une grandeur plus
qu’une autre.
Avec le graphique
a) Quel est l’alignement de ce personnage (héro ou vilain) retourné par
l’algorithme des 3-plus proches voisins pour la distance euclidienne
normalisée?
b) Quel est l’alignement de ce personnage retourné par l’algorithme des 5-plus
proches voisins pour la même distance ?
Avec le tableur
c) Recopier les données des 10 personnages dans un tableur, puis ajouter une
colonne pour y calculer la distance euclidienne normalisée au personnage
mystère.
d) Retrouver ainsi la réponse aux questions a) et b).
e) Définir une fonction min_max() qui prend en paramètres table (une liste
de dictionnaires) et cle (une des clés partagée par tous les
dictionnaires). Celle-ci doit renvoyer le tuple (mini, maxi) où mini
(respectivement maxi) est la plus petite (respectivement la plus grande)
valeur prise associée à cle sur l’ensemble des dictionnaires.
Jeu de test:
f) Définir la fonction distance_euclidienne_normalisee() qui admet trois
paramètres perso1, perso2 (des dictionnaires) et table et qui retourne
la distance euclidienne normalisée entre ces deux personnages de cette table.
Jeu de test:
g) En vous inspirant de la fonction knn() obtenue dans le cours, écrire une
fonction knn() admettant les mêmes paramètres table, mystere, k et
dist_choisie et qui retourne la classe majortaire ('héro' ou 'vilain').
h) Appliquer celle-ci au fichier
comics.csv pour retrouver une nouvelle fois les réponses aux questions a)
et b).
Exercice 2: Belliqueux ou pas ?
Quelque part dans la galaxie, Youndu inculque à son protéger Peter Quill comment
reconnaître un extraterrestre belliqueux du premier coup d’oeil. Il a un
classement bien à lui:
Couleur
Taille
Poids
Yeux par pair ?
Belliqueux
jaune
moyenne
léger
non
non
jaune
grande
moyen
oui
oui
vert
petite
moyen
oui
oui
jaune
petite
moyen
non
non
rouge
moyenne
lourd
non
non
vert
grande
lourd
non
oui
vert
moyenne
lourd
non
oui
jaune
petite
léger
oui
oui
Plus tard, il rencontre un extraterrestre dont la peau est jaune, de taille
moyenne, d’un poids léger, avec 6 yeux. Peut-il le provoquer sans craindre de
sérieuses représailles ?
Élaborer une distance pour pouvoir mettre en oeuvre la méthode knn ainsi
pouvoir répondre à la question posée.