2012-09-16 17 views
5

Quando si utilizzano Kmean in Weka, è possibile chiamare getAssignments() sull'output risultante del modello per ottenere l'assegnazione di cluster per ciascuna istanza specificata. Ecco un esempio Jython (troncato):Ottenere l'output di Xmeans clusterer in modo programmatico in Weka

>>>import weka.clusterers.SimpleKMeans as kmeans 
>>>kmeans.buildClusterer(data) 
>>>assignments = kmeans.getAssignments() 
>>>assignments 
>>>array('i',[14, 16, 0, 0, 0, 0, 16,...]) 

L'indice di ciascun numero di cluster corrisponde all'istanza. Quindi, l'istanza 0 si trova nel cluster 14, l'istanza 1 nel cluster 16 e così via.

La mia domanda è: c'è qualcosa di simile per Xmeans? Ho esaminato l'intera API here e non vedo nulla del genere.

risposta

7

Ecco una risposta alla mia domanda dal listserv Weka:

"Not as such. But all clusterers have a clusterInstance() method. You can 
pass each training instance through the trained clustering model to 
obtain the cluster index for each." 

Ecco mia implementazione Jython di questo suggerimento:

>>> import java.io.FileReader as FileReader 
>>> import weka.core.Instances as Instances 
>>> import weka.clusterers.XMeans as xmeans 
>>> import java.io.BufferedReader as read 
>>> import java.io.FileReader 
>>> import java.io.File 
>>> read = read(FileReader("some arff file")) 
>>> data = Instances(read) 
>>> file = FileReader("some arff file") 
>>> data = Instances(file) 
>>> xmeans = xmeans() 
>>> xmeans.setMaxNumClusters(100) 
>>> xmeans.setMinNumClusters(2) 
>>> xmeans.buildClusterer(data)# here's our model 
>>> enumerated_instances = data.enumerateInstances() #get the index of each instance 
>>> for index, instance in enumerate(enumerated_instances): 
     cluster_num = xmeans.clusterInstance(instance) #pass each instance through the model 
     print "instance # ",index,"is in cluster ", cluster_num #pretty print results 

instance # 0 is in cluster 1 
instance # 1 is in cluster 1 
instance # 2 is in cluster 0 
instance # 3 is in cluster 0 

Sto lasciando tutto questo come un punto di riferimento, dal momento che lo stesso approccio potrebbe essere utilizzato per ottenere assegnazioni di cluster per i risultati di uno qualsiasi dei clusterers di Weka.

Problemi correlati