2012-09-16 26 views
5

Al usar Kmeans en Weka, se puede llamar a getAssignments() en la salida resultante del modelo para obtener la asignación de clúster para cada instancia determinada. Aquí hay un ejemplo de Jython (truncado):Obtener el clúster de salida de Xmeans programáticamente en Weka

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

El índice de cada número de clúster corresponde a la instancia. Entonces, la instancia 0 está en el grupo 14, la instancia 1 está en el grupo 16, y así sucesivamente.

Mi pregunta es ¿Hay algo similar para Xmeans? He revisado toda la API here y no veo nada de eso.

Respuesta

7

He aquí una respuesta a mi pregunta de la lista de distribución 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." 

Aquí está mi aplicación Jython de esta sugerencia:

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

estoy dejando todo esto como una referencia, ya el mismo enfoque podría usarse para obtener asignaciones de clúster para los resultados de cualquiera de los clusterers de Weka.

Cuestiones relacionadas