2015-01-06 5 views
5

Sembra che ci siano molte informazioni sulla creazione di cluster gerarchici o k-significa. Ma vorrei sapere se esiste una soluzione in R che creerebbe cluster K di dimensioni approssimativamente uguali. V'è un certo roba là fuori a fare questo in altre lingue, ma non sono stato in grado di trovare qualsiasi cosa, da una ricerca su internet che suggerisce come ottenere il risultato in R.In R, esiste un algoritmo per creare cluster approssimativamente uguali alle dimensioni

Un esempio potrebbe essere

set.seed(123) 
df <- matrix(rnorm(100*5), nrow=100) 
km <- kmeans(df, 10) 
print(sapply(1:10, function(n) sum(km$cluster==n))) 

che si traduce in

[1] 14 12 4 13 16 6 8 7 13 7 

Vorrei idealmente vedere

[1] 10 10 10 10 10 10 10 10 10 10 
+0

Tutto quello che posso fare è fare riferimento a http://cran.r-project.org/web/views/Cluster.html per un elenco completo di pacchetti relativi ai cluster. Spero che qualcuno a conoscenza di quel problema abbia un suggerimento particolare per te. – flodel

+0

Credo che il clustering di Ward produrrà cluster di dimensioni più uguali. Prova a giocare con 'hclust (d, method =" ward.D ")' o 'hclust (d, method =" ward.D2 ")' – JasonAizkalns

+0

Grazie flodel e jaysunice. Jaysunice, lo esaminerò domani. – Graeme

risposta

-2

La sua non è del tutto chiaro che cosa stai chiedendo, ma è molto facile per generare dati casuali a R. Se il set di dati ha due dimensioni si potrebbe fare qualcosa di simile -

cluster1 = data.frame(x = rnorm(100, mean=5,sd=1), y = rnorm(100, mean=5,sd=1)) 
cluster2 = data.frame(x = rnorm(100, mean=15,sd=1), y = rnorm(100, mean=15,sd=1)) 

Questo genera normalmente distribuito dati casuali attraverso x e y per 100 punti dati in ciascun cluster.

Poi vederlo -

plot(cluster1, xlim = c(0,25), ylim = c(0,25)) 
lines(cluster2, type = "p")! 
+1

Non penso che tu sappia cosa sia l'analisi del clustering. Immaginate dati con 200 punti, l'OP vuole un processo che etichetterà i punti in due gruppi di 100 ciascuno. – flodel

+0

Io ... Pensavo volesse generare dati per poi fare analisi di clustering per qualsiasi motivo. – DG1

0

direi che non si dovrebbe, in primo luogo. Perché? Quando ci sono naturalmente grappoli ben formati nei dati, ad esempio,

plot(matrix(c(sample(1:10,10),sample(30:40, 7), sample(80:90,9)), ncol=2, byrow = F)) 

allora questi saranno raggruppati insieme in ogni caso (supponendo k è uguale al n naturale del cluster; vedere this comprehensive answer su come scegliere un buon k). Se sono di dimensioni uniformi, allora si avranno grappoli con dimensioni uguali; se non lo sono, forzare una dimensione uniforme del cluster sicuramente peggiorerà l'idoneità della soluzione di clustering. Se non si dispone naturalmente belle cluster nei dati, ad esempio,

plot(matrix(c(sample(1:100, 100), ncol=2))) 

poi forzando una dimensione di cluster o sarà ridondante (se i dati è completamente casuale, le dimensioni di cluster sarà ~ uguali - ma poi ci non ha molto senso di clustering in ogni caso), o, se ci sono alcune belle cluster in là, ad esempio,

plot(matrix(c(sample(1:15,15),sample(20:100, 11)), ncol=2, byrow = T)) 

allora la dimensione costretto quasi certamente li rompe.

Il metodo di Ward menzionato nei commenti di JasonAizkalns, tuttavia, fornirà più cluster a forma di "tondo" rispetto al single-link, ad esempio, quindi potrebbe essere una strada da percorrere (vedere help(hclust) per la differenza tra D e D2, non è arbitrario).

+0

(-1) Non risponde alla domanda. Supponiamo che tu abbia dati da n segnali misti, ugualmente campionati m volte. Si potrebbe voler raggruppare i dati in n cluster ugualmente dimensionati. –

Problemi correlati