Il faut répondre sur trois niveaux, parce qu’aucun ne suffit seul.
Ils mesurent la géométrie du découpage : les groupes sont-ils compacts et bien séparés ?
Leur limite commune, qu’il faut nommer : ils récompensent des groupes sphériques et compacts. Ils sont donc biaisés en faveur de ce que k-means produit, et ils noteront mal un DBSCAN parfaitement correct sur des formes allongées. Comparer deux algorithmes différents à la silhouette est un raisonnement fautif.
C’est le critère le plus négligé et l’un des plus informatifs. On refait le clustering sur des sous-échantillons — ou avec des germes aléatoires différents — et on mesure à quel point les découpages se ressemblent, par indice de Rand ajusté ou information mutuelle ajustée.
from sklearn.metrics import adjusted_rand_score
a = KMeans(5, random_state=0).fit_predict(X_echantillon_1)
b = KMeans(5, random_state=1).fit_predict(X_echantillon_2)
adjusted_rand_score(a[commun], b[commun])Le raisonnement : une structure réelle se retrouve dans un autre échantillon du même phénomène. Un découpage qui change du tout au tout est un découpage du bruit, même s’il obtient une belle silhouette.
Un clustering existe pour servir à quelque chose, et c’est là que se mesure sa qualité :
Si un sous-ensemble étiqueté existe — même petit — il faut l’utiliser : indice de Rand ajusté ou information mutuelle ajustée entre les groupes trouvés et les classes connues. Les deux corrigent le hasard, ce que ne fait pas l’indice de Rand brut, et l’un comme l’autre sont insensibles à la numérotation des groupes, qui n’a aucune signification.