Choisir des clusters pour k-means: le cas de 1 cluster

9

Quelqu'un connaît-il une bonne méthode pour déterminer si le regroupement à l'aide de kmeans est même approprié? Autrement dit, que se passe-t-il si votre échantillon est réellement homogène? Je sais que quelque chose comme un modèle de mélange (via mclust dans R) fournira des statistiques d'ajustement pour le cas de cluster 1: k, mais il semble que toutes les techniques pour évaluer kmeans nécessitent au moins 2 clusters.

Quelqu'un connaît-il une technique pour comparer les cas de grappes 1 et 2 pour kmeans?

dmartin
la source

Réponses:

10

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:
entrez la description de l'image ici 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).

Jack
la source
comment faire de même pour le clustering hiérarchique avec une seule liaison? Pouvez-vous expliquer l'argument FUN de clusGap? J'ai exécuté la ligne ci-dessous pour kmax hiérarchique = 20 cgap <- clusGap (cluster_feat_base [, 2: ncol (cluster_feat_base)], FUN = hclust, K.max = kmax, B = 100). Mais son donnant une erreur disant Erreur dans FUNcluster (X, kk, ...): méthode de clustering invalide 2
GeorgeOfTheRF
4

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 .

argyris
la source
0

Supposons que je considère le même exemple,

Tuneb[k,3]>cgunep

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)

Tharang
la source