• 15 heures
  • Difficile

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 08/01/2024

Entraînez-vous à manipuler des algorithmes de clustering avec sklearn

À vous de jouer

Le but de cette activité est de faire un clustering d’images représentant des chiffres manuscrits, en Python. Nous allons utiliser des images extraites d’un très célèbre jeu de données, MNIST. Pour cela, définissez le chemin custom_data_home vers le répertoire où vous voulez le télécharger :

custom_data_home = <mon répertoire>

puis utilisez le code Python suivant :

from sklearn import datasets

Si le message ci-dessus renvoie une erreur INTERNAL SERVER ERROR, c’est parce que le serveur mldata.org  depuis lequel fetch_mldata tente de télécharger des données ne fonctionne pas. Vous pouvez alors, à défaut, télécharger les données depuis https://github.com/amplab/datascience-sp14/raw/master/lab7/mldata/mnist-original.mat dans le répertoire <custom_data_home>/mldata.

Les données MNIST sont assez lourdes (70 000 images). Pour cette activité, vous pouvez travailler avec une fraction du jeu de données : une image sur 50.

X = mnist.data[::50, :]
y = mnist.target[::50]

Chaque observation de ce jeu de données est une image de 28 pixels par 28 pixels, dont l’étiquette y[i] est le chiffre qu’elle représente, et les 784 features, le niveau de gris (entre 0 et 255) du pixel correspondant (car 28 x 28 = 784). Pour visualiser une de ces images, par exemple celle d’index 42, vous pouvez utiliser le code suivant :

sample_idx = 42
sample_image = np.reshape(X[sample_idx, :], (28, 28))
plt.imshow(sample_image, cmap='binary')

Pour cet exercice, il vous est demandé :

  1. D’effectuer un partitionnement de X en 10 clusters, avec l’algorithme de clustering de votre choix.

  2. De visualiser le résultat de ce clustering en deux dimensions (obtenues par exemple grâce à t-SNE, après scaling des données).

  3. D’évaluer la qualité de ce partitionnement, d’une part intrinsèquement (sans utiliser y) et d’autre part en le comparant aux chiffres représentés par les images (en utilisant y).

Coup de pouce : Pour faciliter la visualisation des résultats, vous pouvez représenter chaque point par le chiffre qu’il représente vraiment, coloré selon le cluster auquel il appartient. Pour cela, vous pouvez utiliser pour le i-ème point le code suivant :

plt.text(dimension1[i], dimension2[i], # à vous de définir ces dimensions !
        str('%d' % y[i]),  # le point i est représenté par son chiffre
        color=plt.cm.Set2(myclust.labels_[i]/10.)
        )

Dans ce code, myclust est un objet cluster de scikit-learn. N’hésitez pas à changer la colormap Set2, cf. https://matplotlib.org/users/colormaps.html.

Vérifiez bien que vous avez les éléments suivants :

  • la réduction de dimension est fonctionnelle (par exemple grâce au t-SNE) ;

  • les données ont été scalées avant la réduction de dimension ;

  • l'algorithme de clustering approprié a été utilisé et retourne 10 clusters.

Vérifiez votre travail

Voici un exemple pour vous permettre de vérifier votre travail.

Exemple de certificat de réussite
Exemple de certificat de réussite