【发布时间】:2011-01-25 08:31:09
【问题描述】:
我想知道java中简单的k-means算法。我只想将 k-means 用于对一维数组而不是多维数组进行分组。 例如, 分组前数组由 2,4,7,5,12,34,18,25 组成 如果我们想要四组,那么我们得到了 第一组:2,4,5 第 2 组:7,12 第 3 组:18,25 第 4 组:34
【问题讨论】:
我想知道java中简单的k-means算法。我只想将 k-means 用于对一维数组而不是多维数组进行分组。 例如, 分组前数组由 2,4,7,5,12,34,18,25 组成 如果我们想要四组,那么我们得到了 第一组:2,4,5 第 2 组:7,12 第 3 组:18,25 第 4 组:34
【问题讨论】:
您可以查看 Weka implementation,或者如果您只需要集群而不是实现,则只需使用 Weka API。
【讨论】:
K-means 聚类的标准(启发式)算法在Wikipedia page 上介绍,以及变体和一些现有实现的链接。
(这是编程论坛,因此可以合理地假设您能够自己编写 Java 代码……如果您找不到合适的现有实现。)
【讨论】:
You can implement k-Means as:
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++;
}
【讨论】:
您可以查看我的软件:SPMF data mining software。
它仅在 3 个文件中提供了 KMeans 的有效实现,因此应该很容易理解。
该软件还提供许多其他算法。但你不需要它们。
但另一件事是,还有一个用于启动 KMeans 和其他算法的图形用户界面。
【讨论】: