使用二叉树结构的 KMeans 算法中的数据聚类

Posted

技术标签:

【中文标题】使用二叉树结构的 KMeans 算法中的数据聚类【英文标题】:Data clustering in KMeans Algorithm using binary tree structure 【发布时间】:2012-02-06 23:02:12 【问题描述】:

我在为 Java 中的 KMeans 集群生成代码时遇到问题。我已经知道该算法,但是很难用 java 代码编写。 我的任务是从数据库中检索数据,然后使用 KMeans 运行聚类,在这种情况下,数据首先必须以递归二叉树结构形成。 场景是

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

    创建节点及其与父节点的关系

    从数据库(我使用 JDBC)检索所有数据到父母(接下来我们称之为数据集)

    如果数据集

    如果数据集

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

    Cal KMeans 类

    global_iteration++

    对于每个数据集:继续递归。

然后我们必须创建一个类 KMeans,该类将被调用以插入到节点中。

KMeans(数据集,k,maxIteration,minChange)

备注:k=簇数,minChange:质心变化过程中的值,作为是否仍要进行聚类的参数。 Kmeans 聚类与 commong KMeans 算法相同。

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

【问题讨论】:

如果这是一个家庭作业问题,请标记为这样。否则,也许您不想重新发明***并从互联网上获取现成的东西。 【参考方案1】:
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++;

【讨论】:

他可能不想使用Weka k-means,而是实现了利用二叉树结构的更有效的k-means变体。但无论如何,这个问题已经存在两年了。猜猜他的“任务”已经结束了。【参考方案2】:

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

【讨论】:

还是不知道,谁能给我举个例子?我是java新手 这不是一个家庭作业解决网站。自己尝试并就您已经制作的一些东西提出问题......

以上是关于使用二叉树结构的 KMeans 算法中的数据聚类的主要内容,如果未能解决你的问题,请参考以下文章

K-means 与KNN 聚类算法

聚类——Kmeans

八:聚类算法K-means(20191223-29)

聚类算法 - kmeans

机器学习-kmeans/kmedoids/spectralcluster聚类算法

强算KMeans聚类算法演示器