使用二叉树结构的 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 算法中的数据聚类的主要内容,如果未能解决你的问题,请参考以下文章