Weka 简单的 K-means 聚类分配

Posted

技术标签:

【中文标题】Weka 简单的 K-means 聚类分配【英文标题】:Weka simple K-means clustering assignments 【发布时间】:2011-10-04 21:13:29 【问题描述】:

我有一个感觉很简单的问题,但我似乎找不到答案。我对 Weka 还很陌生,但我觉得我已经对此进行了一些研究(至少通读了谷歌搜索结果的前几页)并且结果枯燥无味。

我正在使用 Weka 使用 Simple K-Means 运行集群。在结果列表中,我可以毫无问题地可视化我的输出(“可视化集群分配”),从我对 K-Means 算法的理解和 Weka 的输出来看,我的每个实例最终都会成为一个成员不同的集群(以特定质心为中心,如果你愿意的话)。

我可以从文本输出中看到一些集群组成。然而,Weka 没有为我提供从实例编号到集群编号的明确“映射”。我想要类似的东西:

instance 1 --> cluster 0
instance 2 --> cluster 0
instance 3 --> cluster 2
instance 4 --> cluster 1
... etc.

如何在不计算每个项目到每个质心的距离的情况下获得这些结果?

【问题讨论】:

【参考方案1】:

我遇到了同样的问题并解决了。如果有人需要知道,我在这里发布方法:

其实很简单,你必须使用Weka的java api。

SimpleKMeans kmeans = new SimpleKMeans();

kmeans.setSeed(10);

// This is the important parameter to set
kmeans.setPreserveInstancesOrder(true);
kmeans.setNumClusters(numberOfClusters);
kmeans.buildClusterer(instances);

// This array returns the cluster number (starting with 0) for each instance
// The array has as many elements as the number of instances
int[] assignments = kmeans.getAssignments();

int i=0;
for(int clusterNum : assignments) 
    System.out.printf("Instance %d -> Cluster %d", i, clusterNum);
    i++;

【讨论】:

在哪里可以找到最新的 api,其中出现了 setPreserveInstancesOrder、getAssignments 等方法的文档? 嗨@amon.gammon 如果我想显示实例的特定属性怎么办? ***.com/questions/21014916/…【参考方案2】:

啊哈,我想我找到了我要找的东西。 在集群可视化工具下,单击“保存”。这将整个数据集保存为与我提供的输入文件几乎相同的 ARFF 文件,但具有 2 个新属性:第一个属性是实例的索引,而最后一个属性是集群分配。现在我只需要解析其中的废话!

【讨论】:

更好:使用 Java API 的接口。 同理,weka的EM算法能否得到聚类概率? 原来,我们也可以使用-p命令行参数让Weka输出预测结果。

以上是关于Weka 简单的 K-means 聚类分配的主要内容,如果未能解决你的问题,请参考以下文章

[机器学习]二分k-means算法详解

Canopy聚类算法

K-Means算法的Python实现

RapidMiner 和 WEKA:不同的聚类结果

ML: 聚类算法R包-K中心点聚类

WEKA - 将实例分配给 kmeans.buildClusterer 时出错