Come stabilire se i dati sono "raggruppati" abbastanza per consentire agli algoritmi di raggruppamento di produrre risultati significativi?


78

Come faresti a sapere se i tuoi dati (ad alta dimensione) mostrano un clustering sufficiente in modo che i risultati provenienti da kmean o altri algoritmi di clustering siano effettivamente significativi?

Per l'algoritmo k-mean in particolare, quanto dovrebbe essere significativa una riduzione della varianza all'interno del cluster affinché i risultati effettivi del cluster siano significativi (e non spuri)?

Il clustering dovrebbe essere evidente quando viene tracciata una forma di dati a dimensioni ridotte e i risultati dei kmean (o altri metodi) sono privi di significato se il clustering non può essere visualizzato?


1
Le cifre scritte a mano sono un buon test per il clustering: ci si aspetterebbe 10 cluster ben separati, ma questo non mostra alcun ginocchio a k = 10, almeno nella metrica euclidea in 64d.
denis,


2
Questa domanda è in parte correlata alla domanda su come verificare la validità dei risultati del clustering e su come selezionare un metodo "migliore". Vedi ad esempio stats.stackexchange.com/q/195456/3277 .
ttnphns,

Risposte:


77

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.

inserisci qui la descrizione dell'immagine

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).

inserisci qui la descrizione dell'immagine


Grazie per questa risposta MOLTO istruttiva! Sembra che il clusterboot sia esattamente quello che sto cercando. Grazie anche per aver incluso i link.
xuexue,

1
Alcuni numeri magici per interpretare i valori della silhouette: stats.stackexchange.com/a/12923/12359
Franck Dernoncourt,

1
Qual era il / i comando / i che hai usato per costruire quei grafici nella gif?
Travis Heeter,

2
@Travis Le immagini sono state salvate come file PNG separati e quindi convertite in un file GIF animato usando ImageMagick . Vedi anche questo post .
chl

10

Un modo per visualizzare rapidamente se i dati ad alta dimensione presentano un clustering sufficiente è utilizzare l'incorporamento stocastico vicino t-Distributed ( t-SNE ). Proietta i dati su uno spazio a bassa dimensione (ad es. 2D, 3D) e fa un ottimo lavoro nel mantenere la struttura del cluster, se presente.

Ad esempio set di dati MNIST :

inserisci qui la descrizione dell'immagine

Olivetti affronta set di dati:

inserisci qui la descrizione dell'immagine


1
C'è un modo per applicare i volti (o qualsiasi immagine) in R?
Travis Heeter,

1
@TravisHeeter Non lo so
Franck Dernoncourt,

4
Non raggruppare i dati proiettati tSNE. Vedi, ad esempio, questa risposta: stats.stackexchange.com/a/264647/7828
Anony-Mousse

9

Sicuramente, la capacità di discernere visivamente i cluster in un numero imprecisabile di dimensioni è un criterio dubbio per l'utilità di un algoritmo di clustering, specialmente se questa riduzione di dimensione viene effettuata indipendentemente dal cluster stesso (ovvero: in un vano tentativo di scoprire se il clustering funzionerà).

In effetti, i metodi di clustering hanno il loro massimo valore nel trovare i cluster in cui l'occhio / mente umano non è in grado di vedere i cluster.

La semplice risposta è: fai il clustering, quindi scopri se ha funzionato (con uno qualsiasi dei criteri che ti interessano, vedi anche la risposta di Jeff).


1
Sì, e i cluster non sono necessariamente dei bei gruppi rotondi di punti, che è fondamentalmente ciò che presuppone i kmean.
Wayne,

@chl Hai prodotto questa immagine animata con R?
Stéphane Laurent,

7

Quando i risultati sono significativi comunque? In particolare i risultati di k-mean?

Il fatto è che k-medie ottimizza una certa statistica matematica. Non vi è alcun "significativo" associato a questo.

In particolare nei dati ad alta dimensione, la prima domanda dovrebbe essere: la distanza euclidea è ancora significativa ? Altrimenti, non usare k-mean. La distanza euclidea è significativa nel mondo fisico, ma perde rapidamente significato quando si hanno altri dati. In particolare, quando trasformi artificialmente i dati in uno spazio vettoriale, c'è qualche ragione per cui dovrebbero essere euclidei?

Se prendi il classico set di dati "vecchi fedeli" e esegui k-mean su di esso senza normalizzazione, ma con pura distanza euclidea, non è più significativo. EM, che in effetti utilizza una qualche forma di distanza di Mahalanobis "cluster locale", funzionerà molto meglio. In particolare, si adatta agli assi con scale molto diverse.

A proposito, un punto di forza di k-mean è che in realtà partizionerà sempre i dati, indipendentemente da come si presenta. È possibile utilizzare k-means per suddividere il rumore uniforme in k cluster . Si può affermare che, ovviamente, i cluster k-significano non sono significativi. Oppure si può accettare questo come: l'utente voleva partizionare i dati per minimizzare le distanze euclidee quadrate, senza che i cluster fossero tenuti a "essere significativi".


@ Anony-Mousse E utilizzare il caso per "dividere il rumore uniforme in k gruppi"?
CodeFarmer

Non c'è nessuno. Il punto è che a k-mean non importa, partizionerà i dati uniformi in "cluster", cioè produce cluster senza senso.
Anony-Mousse il

6

Ho appena iniziato a utilizzare algoritmi di clustering di recente, quindi spero che qualcuno più esperto possa fornire una risposta più completa, ma ecco alcuni pensieri:

"Significativo", come sono sicuro che tu sia a conoscenza, è molto soggettivo. Quindi, se il clustering è abbastanza buono dipende completamente dal motivo per cui è necessario raggruppare in primo luogo. Se stai cercando di prevedere l'appartenenza al gruppo, è probabile che qualsiasi clustering farà meglio del caso (e non peggio), quindi i risultati dovrebbero essere significativi in ​​una certa misura.

Se vuoi sapere quanto è affidabile questo clustering, hai bisogno di alcune metriche per confrontarlo. Se si dispone di un insieme di entità con appartenenze note, è possibile utilizzare l'analisi discriminante per verificare la validità delle previsioni. Se non si dispone di un insieme di entità con appartenenze note, è necessario conoscere la varianza tipica dei cluster nel proprio campo. Gli attributi fisici delle entità con categorie rigide hanno probabilmente una varianza all'interno del gruppo molto più bassa rispetto ai dati psicometrici sull'uomo, ma ciò non necessariamente peggiora il raggruppamento.

La tua seconda domanda allude a "Quale valore di k dovrei scegliere?" Ancora una volta, non c'è una risposta difficile qui. In assenza di una serie di categorie a priori, probabilmente si desidera ridurre al minimo il numero di cluster riducendo al contempo la varianza media dei cluster. Un approccio semplice potrebbe essere quello di tracciare il "numero di cluster" rispetto alla "varianza media dei cluster" e cercare il "gomito", in cui l'aggiunta di più cluster non ha un impatto significativo sulla varianza dei cluster.

Non direi che i risultati di k-mean siano privi di significato se non possono essere visualizzati, ma è certamente interessante quando i cluster sono visivamente evidenti. Questo, di nuovo, riporta alla domanda: perché devi fare il clustering e quanto devi essere affidabile? In definitiva, questa è una domanda a cui devi rispondere in base a come utilizzerai i dati.


3

Per sapere se un cluster è significativo, è possibile eseguire un algoritmo per contare il numero di cluster e vedere se genera qualcosa di maggiore di 1.

KK

KK

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.