Informazioni su k-significa in particolare, è possibile utilizzare le statistiche Gap. Fondamentalmente, l'idea è di calcolare una bontà della misura del clustering in base alla dispersione media rispetto a una distribuzione di riferimento per un numero crescente di cluster. Ulteriori informazioni sono disponibili nel documento originale:
Tibshirani, R., Walther, G. e Hastie, T. (2001). Stima del numero di cluster in un set di dati tramite la statistica gap . Statista JR. Soc. B, 63 (2): 411-423.
La risposta che ho fornito a una domanda correlata evidenzia altri indici di validità generale che potrebbero essere utilizzati per verificare se un determinato set di dati presenta un qualche tipo di struttura.
Quando non hai idea di cosa ti aspetteresti di trovare se ci fosse solo rumore, un buon approccio è usare il ricampionamento e studiare la stabilità dei cluster. In altre parole, ricampiona i tuoi dati (tramite bootstrap o aggiungendo un po 'di rumore) e calcola la "vicinanza" delle partizioni risultanti, misurata dalle somiglianze di Jaccard . In breve, consente di stimare la frequenza con cui cluster simili sono stati recuperati nei dati. Questo metodo è prontamente disponibile nel pacchetto fpc R come clusterboot()
. Prende come input dati grezzi o una matrice di distanza e consente di applicare una vasta gamma di metodi di clustering (gerarchico, k-medie, metodi fuzzy). Il metodo è discusso nei riferimenti collegati:
Hennig, C. (2007) Valutazione a livello di cluster della stabilità dei cluster .
Statistica computazionale e analisi dei dati , 52, 258-271.
Hennig, C. (2008) Punto di dissoluzione e robustezza dell'isolamento: criteri di robustezza per i metodi generali di analisi dei cluster . Journal of Multivariate Analysis , 99, 1154-1176.
Di seguito una piccola dimostrazione con l'algoritmo k-mean.
sim.xy <- function(n, mean, sd) cbind(rnorm(n, mean[1], sd[1]),
rnorm(n, mean[2],sd[2]))
xy <- rbind(sim.xy(100, c(0,0), c(.2,.2)),
sim.xy(100, c(2.5,0), c(.4,.2)),
sim.xy(100, c(1.25,.5), c(.3,.2)))
library(fpc)
km.boot <- clusterboot(xy, B=20, bootmethod="boot",
clustermethod=kmeansCBI,
krange=3, seed=15555)
I risultati sono abbastanza positivi in questo set di dati artificiale (e ben strutturato) poiché nessuno dei tre cluster ( krange
) è stato dissolto tra i campioni e la somiglianza Jaccard clusterwise media è> 0,95 per tutti i cluster.
Di seguito sono riportati i risultati sui 20 campioni bootstrap. Come si può vedere, le unità statistiche tendono a rimanere raggruppate nello stesso cluster, con poche eccezioni per quelle osservazioni che si trovano nel mezzo.
Puoi estendere questa idea a qualsiasi indice di validità, ovviamente: scegli una nuova serie di osservazioni tramite bootstrap (con sostituzione), calcola la tua statistica (es. Larghezza della sagoma, correlazione copenetica, gamma di Hubert, in somma di quadrati) per un intervallo di numeri di cluster (ad es. da 2 a 10), ripetere 100 o 500 volte e osservare il diagramma a scatole della propria statistica in funzione del numero di cluster.
Ecco cosa ottengo con lo stesso set di dati simulato, ma usando il clustering gerarchico di Ward e considerando la correlazione cophenetic (che valuta il grado di riproduzione delle informazioni sulla distanza nelle partizioni risultanti) e l'ampiezza della silhouette (una misura combinata che valuta l'omogeneità intra-cluster e l'inter- separazione dei grappoli).
La correlazione copenetica varia da 0,6267 a 0,7511 con un valore mediano di 0,7031 (500 campioni bootstrap). La larghezza della sagoma sembra essere massima quando consideriamo 3 cluster (mediana 0,8408, intervallo 0,7371-0,8769).