在Weka中以编程方式获取Xmeans集群器输出 [英] Getting Xmeans clusterer output programmatically in Weka
问题描述
在Weka中使用Kmeans时,可以在模型的结果输出上调用getAssignments()以获取每个给定实例的集群分配。这是一个截短的Jython示例:
When using Kmeans in Weka, one can call getAssignments() on the resulting output of the model to get the cluster assignment for each given instance. Here's a (truncated) Jython example:
>>>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中,依此类推。
The index of each cluster number corresponds to the instance. So, instance 0 is in cluster 14, instance 1 is in cluster 16, and so on.
我的问题是:Xmeans是否有类似的东西?我已经在此处中浏览了整个API,看不到那样的东西。
My question is: Is there something similar for Xmeans? I've gone through the entire API here and don't see anything like that.
推荐答案
以下是来自Weka listserv的我的问题的回复:
Here's a reply to my question from the 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实施的建议:
Here's my Jython implementation of this suggestion:
>>> 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的任何集群器的结果的集群分配。
I'm leaving all of this up as a reference, since the same approach could be use to get cluster assignments for the results of any of Weka's clusterers.
这篇关于在Weka中以编程方式获取Xmeans集群器输出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!