2011-08-28 8 views
8

Sto cercando di implementare l'algoritmo di clustering Canopy insieme a K-Means. Ho fatto qualche ricerca online che dice di usare Canopy clustering per ottenere i punti di partenza iniziale per alimentare K-means, il problema è, in Canopy clustering, è necessario specificare 2 valori di soglia per il baldacchino: T1 e T2, dove i punti nella soglia interna sono fortemente legati a quella vela e i punti nella soglia più ampia sono meno legati a quella vela. Come vengono determinate queste soglie o distanze dal centro della chioma? contestoCome selezionare i valori di soglia T1 e T2 per Canopy Clustering?

Problema:

Il problema che sto cercando di risolvere è, ho una serie di numeri, come [1,30] o [1.250] con misure serie di circa 50. Non ci può essere elementi duplicati e possono anche essere numeri in virgola mobile, come 8, 17.5, 17.5, 23, 66, ... Voglio trovare i cluster ottimali, o sottoinsiemi dell'insieme di numeri.

Quindi, se Canopy di clustering con K-means è una buona scelta, quindi le mie domande si trova ancora: come si fa a trovare il T1, T2 valori ?. Se questa non è una buona scelta, c'è un algoritmo migliore, più semplice ma efficace da usare?

+0

Ecco un'altra domanda simile http://stats.stackexchange.com/questions/13895/how-do-i-a-gorithmically-determine-values-of-t1-t2-for-canopy-clustering – cyraxjoe

+0

Hai avuto fortuna con questo ancora? Sto cercando di utilizzare Canopy Clustering per trovare un set di cluster iniziale da alimentare con K-Means. Potrei usare il "Jump Method", come descritto [qui] (http://en.wikipedia.org/wiki/Determining_the_number_of_clusters_in_a_data_set) (che suona simile al metodo @rpd descrive nella sua risposta), ma se hai trovato un buon modo per determinare T1 e T2 mi piacerebbe usare Canopy Clustering. – JesseBuesking

risposta

2

forse ingenuamente, vedo il problema in termini di una sorta di spettrale-stima. Supponiamo che io abbia 10 vettori. Posso calcolare le distanze tra tutte le coppie. In questo caso otterrei 45 di tali distanze. Tracciali come un istogramma in varie gamme di distanza. Per esempio. 10 distanze sono comprese tra 0,1 e 0,2, 5 tra 0,2 e 0,3 ecc. E si ha un'idea di come vengono distribuite le distanze tra i vettori. Da questa informazione puoi scegliere T1 e T2 (ad esempio sceglierli in modo da coprire l'intervallo di distanza più popolato).

Naturalmente, questo non è pratico per un set di dati di grandi dimensioni - ma si può semplicemente prendere un campione casuale o qualcosa in modo tale che almeno si conosca il campo di baseball di T1 e T2. Usando qualcosa come Hadoop si potrebbe fare una sorta di stima spettrale precedente su un gran numero di punti. Se tutti i dati in arrivo che si sta tentando di raggruppare sono distribuiti più o meno allo stesso modo, è necessario disporre di T1 e T2 una volta, quindi correggerli come costanti per tutte le esecuzioni future.

2

In realtà questo è il grosso problema con baldacchino clustering. La scelta delle soglie è tanto difficile quanto l'algoritmo attuale. In particolare in alte dimensioni. Per un set di dati geografici 2D, un esperto di dominio può probabilmente definire facilmente le soglie di distanza. Ma nei dati elevate dimensioni, probabilmente la migliore che si può fare è quello di run k-means su un campione dei propri dati prima, quindi scegliere le distanze sulla base di questa corsa del campione.