Exercices sur la classification

Exercice 1: Héro ou vilain ?

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).

Avec un algorithme

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)mini (respectivement maxi) est la plus petite (respectivement la plus grande) valeur prise associée à cle sur l’ensemble des dictionnaires.
Jeu de test:

>>> table = [{'Taille': 100, 'Poids': 50}, {'Taille': 20, 'Poids': 60}]
>>> min_max(table, 'Taille')
(20, 100)

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:

>>> luthor = {'Name': 'Lex Luthor', 'Taille': 188, 'Poids': 95, 'Alignement': 'vilain'}
>>> firelord = {'Name': 'Firelord', 'Taille': 193, 'Poids': 99, 'Alignement': 'héro'}
>>> table = [luthor, firelord]
>>> round(distance_euclidienne_normalisee(luthor, firelord, table), 3)
1.414

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.