Scegliere i cluster per k-significa: il caso 1 cluster


9

Qualcuno conosce un buon metodo per determinare se il clustering utilizzando kmean è persino appropriato? Cioè, cosa succede se il campione è effettivamente omogeneo? So che qualcosa come un modello di miscela (tramite mclust in R) fornirà statistiche di adattamento per il caso cluster 1: k, ma sembra che tutte le tecniche per valutare i kmean richiedano almeno 2 cluster.

Qualcuno conosce una tecnica per confrontare i casi di cluster 1 e 2 per kmean?

Risposte:


10

La statistica gap è un ottimo modo per farlo; Tibshirani, Hastie & Walther (2001).

http://stat.ethz.ch/R-manual/R-devel/library/cluster/html/clusGap.html - Il pacchetto R pertinente.

L'idea è che esegue un test sequenziale di ipotesi di raggruppamento dei dati per K = 1,2,3, ... rispetto a un'ipotesi nulla di rumore casuale, che equivale a un cluster. Il suo punto di forza è che ti dà un'indicazione affidabile se K = 1, cioè se non ci sono cluster.

Ecco un esempio, alcuni giorni fa stavo ispezionando alcuni dati astronomici, in particolare da un sondaggio in transito sull'esopianeta. Volevo sapere quali prove ci sono per i cluster (convessi). I miei dati sono "transito"

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;
}

Con la statistica del gap stai cercando il primo valore di K in cui il test "fallisce", cioè la statistica del gap scende significativamente. Il ciclo qui sopra stamperà tale ak, tuttavia la semplice stampa di cgap ti dà la seguente figura:
inserisci qui la descrizione dell'immagine Guarda come c'è un calo significativo nel Gap da k = 1 a k = 2, che significa che in realtà non ci sono cluster (cioè 1 cluster).


come fare lo stesso per il clustering gerarchico con singolo collegamento? Puoi per favore spiegare l'argomento FUN di clusGap? Ho eseguito la riga seguente per gerarchica kmax = 20 cgap <- clusGap (cluster_feat_base [, 2: ncol (cluster_feat_base)], FUN = hclust, K.max = kmax, B = 100). Ma sta dando un errore che dice Errore in FUNcluster (X, kk, ...): metodo di clustering 2 non valido
GeorgeOfTheRF

4

Puoi provare anche un metodo più recente: A. Kalogeratos e A.Likas, Dip-significa: un metodo di cluster incrementale per stimare il numero di cluster , NIPS 2012.

L'idea è quella di utilizzare il test dell'ipotesi statistica per l'unimodalità su vettori contenenti la somiglianza / distanza tra un punto e il resto dei punti dell'insieme. Il test viene eseguito utilizzando il test di immersione Hartigan-Hartigan , Ann. Statist. 13 (1): 70-84.

Il metodo inizia con tutto il set di dati come un cluster e lo divide in modo incrementale fintanto che l'ipotesi di unimodalità viene respinta (ovvero è presente più di un cluster).

Quindi questo metodo indicherebbe se ci sono più di un cluster nei dati (la tua domanda), ma potrebbe fornire anche il clustering finale.

Qui puoi trovare del codice in Matlab .


0

Supponiamo che stia considerando lo stesso esempio,

Tab[k,3]>cgap

Come posso sottoinsieme elementi di cluster corrispondenti alla migliore soluzione di clustering in base alle statistiche di gap massimo? In modo che io possa usarlo per ulteriori analisi su ciascuno dei cluster.

So che esiste un comando chiamato subset. Non ci sono problemi usando questo comando quando abbiamo dato il numero di cluster che vogliamo. Ma come sottoinsediarlo quando vogliamo sottoinsiemare in base a k ottimale ottenuto usando gap (in breve, sottosezione di elementi di cluster se esiste un loop)

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.