Évaluer un regroupement

Unsupervised Learning in Python

Benjamin Wilson

Director of Research at lateral.io

Évaluer un regroupement

  • Comparer, p. ex., aux espèces d'iris
  • ... mais s'il n'y a aucune espèce de référence ?
  • Mesurer la qualité d'un regroupement
  • Aide à choisir combien de groupes chercher
Unsupervised Learning in Python

Iris : groupes vs espèces

  • k-means a trouvé 3 groupes parmi les échantillons d'iris
  • Les groupes correspondent-ils aux espèces ?
species  setosa  versicolor  virginica
labels
0             0           2         36
1            50           0          0
2             0          48         14
Unsupervised Learning in Python

Tableau croisé avec pandas

  • Groupes vs espèces : « tableau croisé »
  • Utiliser la bibliothèque pandas
  • En supposant la liste species contenant l'espèce de chaque échantillon
print(species)
['setosa', 'setosa', 'versicolor', 'virginica', ... ]
Unsupervised Learning in Python

Faire correspondre libellés et espèces

import pandas as pd
df = pd.DataFrame({'labels': labels, 'species': species})
print(df)
     labels     species
0         1      setosa
1         1      setosa
2         2  versicolor
3         2   virginica
4         1      setosa
...
Unsupervised Learning in Python

Tableau croisé : libellés et espèces

ct = pd.crosstab(df['labels'], df['species'])
print(ct)
species  setosa  versicolor  virginica
labels
0             0           2         36
1            50           0          0
2             0          48         14

Comment évaluer un regroupement s'il n'y a pas d'information d'espèce ?

Unsupervised Learning in Python

Mesurer la qualité d'un regroupement

  • En utilisant seulement les échantillons et leurs libellés de groupe

  • Un bon regroupement produit des groupes serrés

  • Échantillons de chaque groupe rapprochés

Unsupervised Learning in Python

L'inertie évalue la qualité du regroupement

  • Mesure la dispersion des groupes (plus bas est mieux)
  • Distance de chaque échantillon au centroïde de son groupe
  • Après fit(), disponible dans l'attribut inertia_
  • k-means tente de minimiser l'inertie en choisissant les groupes
from sklearn.cluster import KMeans

model = KMeans(n_clusters=3)
model.fit(samples)
print(model.inertia_)
78.9408414261
Unsupervised Learning in Python

Le nombre de groupes

  • Regroupements du jeu de données iris avec divers nombres de groupes
  • Plus de groupes → inertie plus faible
  • Quel est le meilleur nombre de groupes ?

Graphique linéaire : nombre de groupes vs inertie

Unsupervised Learning in Python

Combien de groupes choisir ?

  • Un bon regroupement a des groupes serrés (donc faible inertie)
  • ... mais pas trop de groupes !
  • Choisir un « coude » sur le graphique de l'inertie
  • Là où l'inertie commence à diminuer plus lentement
  • P. ex., pour iris, 3 est un bon choix

Graphique linéaire : nombre de groupes vs inertie

Unsupervised Learning in Python

Passons à la pratique !

Unsupervised Learning in Python

Preparing Video For Download...