使用二叉树结构的K均值算法中的数据聚类

时间:2012-01-10 14:32:34

标签: java cluster-analysis data-mining k-means

我在为Java中的KMeans集群生成代码时遇到了麻烦。我已经知道了算法但是很难用java代码编写。 我的任务是从数据库中检索数据然后运行带有KMeans的群集,在这种情况下,首先必须在递归二叉树结构中形成数据。 方案是

  1. 首先创建父节点,如果parent为NULL,则设置global_iteration = 0

  2. 创建节点及其与父级的关系

  3. 将数据库中的所有数据(我使用JDBC)转发给父母(接下来我们将其称为数据集)

  4. 如果数据集< outlierSize,将此节点标记为异常值(outlierSize由程序员声明)然后停止。

  5. 如果数据集< maxIteration(由程序员说明)然后停止

  6. 从数据集计算质心(在这种情况下是2因为我们构建二叉树)

  7. Cal KMeans班

  8. global_iteration ++

  9. 每个数据集的
  10. :继续递归。

  11. 然后我们必须创建一个将被调用的类KMeans插入节点。

    K均值(数据集,K,maxIteration,minChange)

    备注:k =簇的数量,minChange:质心变化期间的值是是否仍应处理群集的参数。 Kmeans聚类与commong KMeans算法相同。

    非常感谢你帮我完成这项任务:)

2 个答案:

答案 0 :(得分:0)

检查Weka来源code for K-Means,可能会帮助您解决问题。

答案 1 :(得分:0)

You can implement k-means algorithm 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++;
}