Etude de cas

Dans cette séance, nous verrons l'application des 2 méthodes (ACP et classification) pour rechercher les différentes façons d'écrire chaque chiffre.

Nous allons utiliser les données pendigits de l'UCI Machine Learning Repository. Ces données représentent le tracé des chiffres de 0 à 9 par plusieurs personnes. Pour chaque tracé, nous n'avons au final que les coordonnées $(X, Y)$ de 8 points et le chiffre tracé.

Comme vous le pouvez le remarquer, les noms des variables ne sont pas renseignés. Celles-ci sont les coordonnées $(x^j, y^j)_{j=1,\ldots,8}$ et le chiffre. On va donc déjà créer le vecteur correspondant.

On va ensuite renommer les colonnes avec ce vecteur.

Par la suite, nous aurons besoin d'accéder aux $(x^j)$ uniquement, ou aux $(y^j)$, voire aux deux. Nous créons donc des vecteurs avec les noms de variables.

Ces données ont l'avantage d'être graphique. Nous allons donc représenter le premier tracé, qui est un $8$.

Nous allons régulièrement utiliser ce code, donc nous allons le stocker dans une fonction nommée dessin(). Dans celle-ci, nous allons mettre en paramètre les $x^j$ et les $y^j$, le chiffre, ainsi qu'un graphique dans lequel nous allons mettre le dessin. Ceci nous sera utile pour faire plusieurs représentations de chiffres.

Ensuite, nous créons une liste de DataFrame, un pour chaque chiffre. La fonction query() permet donc de sélectionner des lignes d'un DataFrame en fonction d'une condition (ici, chiffre égal 0, 1, ..., 9). Pour éviter les problèmes d'index plus tard, nous devons les réinitialiser pour chaque DataFrame, avec la fonction reset_index(), en mettant drop à vrai. Ceci permet d'oublier les numéros de ligne du DataFrame global et que ceux-ci recommencent de 0 pour chaque sous-ensemble.

Nous voulons maintenant représenter chaque premier exemple de chaque chiffre. Pour cela, nous recherchons la première ligne (index = 0) pour chaque sous-ensemble précédemment créé. Et pour simplifier le travail ensuite, nous renvoyons pour chaque chiffre, trois éléments : les $x^j$, les $y^j$ et le chiffre.

Puis, nous créons une figure (en spécifiant la taille). Et pour chaque chiffre, nous ajoutons un graphique à la figure avec la fonction add_subplot(). Celle-ci prend trois paramètres : le nombre de lignes, le nombre de colonnes et le numéro de placement du prochain graphique. Grâce à l'utilisation de la fonction dessin() et de l'objet subxyc, la réalisation est simple.

Calcul des coordonnées moyennes

On peut calculer les coordonnées moyennes pour représenter le tracé moyen de chaque chiffre.

Récriture de la fonction dessin()

On améliore ici la fonction pour ajouter la possibilité de mettre les points (de 1 à 8).

Représentation des chiffres moyens

A noter :

Représentation des tracés sur un plan en 2D

sur données originales

A noter :

sur données standardisées

A noter :

Recherche des différentes manières d'écrire chaque chiffre

Importation des élements de scikit-learn pour l'utilisation

Définition des fonctions

Il est finalement préférable de découper en 2 fonctions :

Chiffre 0

A noter :

Chiffre 1

recherche(1, 4)

A noter :

Chiffre 2

A noter :

Chiffre 3

A noter :

Chiffre 4

A noter :

Chiffre 5

A noter :

Chiffre 6

A noter :

Chiffre 7

A noter :

Chiffre 8

A noter :

Chiffre 9

A noter :

Conclusion

Il semble bien que pour certains chiffres, il y ait plusieurs façons de réaliser leur tracé.