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).
Vous pouvez également essayer une méthode plus récente: A. Kalogeratos et A.Likas, Dip-means: une méthode de clustering incrémentielle pour estimer le nombre de clusters , NIPS 2012.
L'idée est d'utiliser des tests d'hypothèses statistiques pour l'unimodalité sur des vecteurs contenant la similitude / distance entre un point et le reste des points de l'ensemble. Le test est effectué en utilisant le test d'immersion Hartigan-Hartigan , Ann. Statist. 13 (1): 70-84.
La méthode commence avec tous les ensembles de données en un seul cluster et le divise de manière incrémentielle tant que l'hypothèse d'unimodalité est rejetée (c'est-à-dire que plus d'un cluster est présent).
Ainsi, cette méthode indiquerait s'il y a plus d'un cluster dans les données (votre question), mais elle peut également fournir le clustering final.
Ici vous pouvez trouver du code dans Matlab .
la source
Supposons que je considère le même exemple,
Comment puis-je sous-ensemble des éléments de clusters correspondant à la meilleure solution de clustering en fonction des statistiques d'écart maximum? Pour que je puisse l'utiliser pour une analyse plus approfondie sur chacun des clusters.
Je sais qu'il existe une commande appelée sous-ensemble. Il n'y a aucun problème à utiliser cette commande lorsque nous avons donné le nombre de clusters que nous voulons. Mais comment le sous-ensemble quand on veut le sous-ensemble basé sur k optimal obtenu en utilisant gap (en bref, sous-ensemble des éléments de clusters s'il y a une boucle)
la source