2011-07-13 6 views
13

Ho quello che sembra un semplice problema, ma non riesco a trovare una risposta. Sono abbastanza nuovo per Weka, ma mi sento come se avessi fatto un po 'di ricerche su questo (almeno leggere il primo paio di pagine dei risultati di Google) e venire fuori a secco.Weka simple K-means incarichi di raggruppamento

Sto utilizzando Weka per eseguire il clustering utilizzando Simple K-Means. Nella lista dei risultati non ho problemi a visualizzare il mio output ("Visualizza assegnazioni di cluster") ed è chiaro sia dalla mia comprensione dell'algoritmo di K-Means sia dall'output di Weka che ognuna delle mie istanze sta finendo come membro di un cluster diverso (centrato attorno a un particolare centroide, se vuoi).

Riesco a vedere qualcosa della composizione del cluster dall'output di testo. Tuttavia, Weka non fornisce alcuna "mappatura" esplicita dal numero di istanza al numero di cluster. Vorrei qualcosa di simile:

instance 1 --> cluster 0 
instance 2 --> cluster 0 
instance 3 --> cluster 2 
instance 4 --> cluster 1 
... etc. 

Come faccio a ottenere questi risultati senza calcolare la distanza da ogni elemento per ogni baricentro per conto mio?

risposta

14

Ho avuto lo stesso problema e ho capito. Sto postando il metodo qui se qualcuno ha bisogno di sapere:

In realtà è abbastanza semplice, devi usare la java api di Weka.

SimpleKMeans kmeans = new SimpleKMeans(); 

kmeans.setSeed(10); 

// This is the important parameter to set 
kmeans.setPreserveInstancesOrder(true); 
kmeans.setNumClusters(numberOfClusters); 
kmeans.buildClusterer(instances); 

// This array returns the cluster number (starting with 0) for each instance 
// The array has as many elements as the number of instances 
int[] assignments = kmeans.getAssignments(); 

int i=0; 
for(int clusterNum : assignments) { 
    System.out.printf("Instance %d -> Cluster %d", i, clusterNum); 
    i++; 
} 
+0

Grazie per l'aggiornamento! –

+0

Dove è possibile trovare l'api aggiornata in cui compaiono la documentazione dei metodi setPreserveInstancesOrder, getAssignments, ecc.? – Maoritzio

+0

ciao @ amon.gammon come se volessi mostrare attributi specifici dall'istanza? http://stackoverflow.com/questions/21014916/getting-database-attribute-from-kmeans-clustering-weka – randytan

9

Aha, penso di aver trovato quello che stavo cercando. Sotto il visualizzatore del cluster, fare clic su "Salva". Questo salva l'intero set di dati come un file ARFF quasi identico al file di input che ho fornito, ma con 2 nuovi attributi: il primo attributo è l'indice dell'istanza, mentre l'ultimo attributo è l'assegnazione del cluster. Ora devo solo analizzare la schifezza!

+0

Meglio ancora: interfaccia utilizzando l'API Java. –

+0

In modo simile, possiamo ottenere le probabilità del cluster nell'algoritmo EM di weka? – Dinesh

+0

Esiste un metodo a riga di comando per fare ciò? – Phani