2012-09-16 9 views
5

WekaでKmeansを使用すると、モデルの出力結果に対してgetAssignments()を呼び出して、指定されたインスタンスごとにクラスタ割り当てを取得できます。以下は、(切り捨てられた)Jythonの例です。WekaでXmeans clustererの出力をプログラムで取得する

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

各クラスター番号のインデックスはインスタンスに対応しています。したがって、インスタンス0はクラスタ14にあり、インスタンス1はクラスタ16にあります。

私の質問です:Xmeansに類似したものはありますか?私はAPI全体hereを見てきましたが、そのようなものは見えません。ここで

答えて

7

はウェカのメーリングリストからの私の質問への回答です:

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

ここでは、この提案の私のJythonの実装です:

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

私がいるので、参考としてこのすべてを任せていますWekaのクラスターの結果のクラスター割り当てを取得するために同じアプローチを使用することができます。

関連する問題