La statistique des écarts est un excellent moyen de le faire; Tibshirani, Hastie et Walther (2001).
http://stat.ethz.ch/R-manual/R-devel/library/cluster/html/clusGap.html - Le package R approprié.
L'idée est qu'il effectue un test d'hypothèse séquentiel de regroupement de vos données pour K = 1,2,3, ... vs une hypothèse nulle de bruit aléatoire, ce qui équivaut à un cluster. Sa force particulière est qu'il vous donne une indication fiable de savoir si K = 1, c'est-à-dire s'il n'y a pas de grappes.
Voici un exemple, j'inspectais certaines données d'astronomie il y a quelques jours en temps réel - à savoir à partir d'un relevé d'exoplanètes en transit. Je voulais savoir quelles preuves existaient pour les grappes (convexes). Mes données sont «transit»
library(cluster)
cgap <- clusGap(transit, FUN=kmeans, K.max=kmax, B=100)
for(k in 1:(kmax-1)) {
if(cgap$Tab[k,3]>cgap$Tab[(k+1),3]-cgap$Tab[(k+1),4]) {print(k)};
break;
}
Avec la statistique de l'écart, vous recherchez la première valeur de K où le test «échoue», c'est-à-dire que la statistique de l'écart baisse considérablement. La boucle ci-dessus affichera un tel ak, mais simplement tracer cgap vous donne la figure suivante:
Voyez comment il y a une baisse significative de l'écart de k = 1 à k = 2, ce qui signifie qu'il n'y a en fait aucun cluster (c'est-à-dire 1 cluster).