5

Weka で Kmeans を使用する場合、モデルの出力結果に対して getAssignments() を呼び出して、特定のインスタンスごとにクラスターの割り当てを取得できます。(省略された) Jython の例を次に示します。

>>>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 全体を確認しましたが、そのようなものは見当たりません。

4

1 に答える 1

7

Weka listserv からの私の質問への回答は次のとおりです。

 "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 のクラスタラーのいずれかの結果のクラスター割り当てを取得できるため、これらすべてを参照として残しておきます。

于 2012-09-23T16:58:58.660 に答える