2012-01-10 39 views
0

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

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

  2. 创建节点和它的相对于父

  3. retreive从数据库中的所有数据(i (接下来我们称之为数据集)

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

  5. 如果数据集< maxIteration(程序员规定),则停止从数据集

  6. 计算质心(在这种情况下是2的事业,我们建立二叉树)

  7. 卡尔KMEANS类

  8. global_iteration ++

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

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

KMEANS(数据集,K,maxIteration,minChange)

备注:K =簇的簇号,minChange:重心变化期间的值是参数是否聚类仍应被处理或不。 Kmeans聚类与KMeans算法完全相同。

非常感谢你帮我做这个作业:)

+0

如果这是一个家庭作业问题,请标记为这样。否则,也许你不想重新发明轮子并从网络中随时获取一些东西。 – Pieter 2012-01-10 14:46:25

回答

0

检查Wekacode for K-Means,可能它会帮助你来解决这个问题。

+0

还是不知道,有谁能给我举个例子吗?我是新手在java – fobiacristy 2012-01-11 13:50:32

+0

这不是一个家庭作业解决网站。自己尝试一下,然后问一些你已经做过的东西...... – JuanZe 2012-01-11 13:53:08

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++; 
} 
+0

他可能不想使用Weka k-means,但实现了k-means的*更高效*变体,它利用二叉树结构。但无论如何,这个问题已经两岁了。猜猜他的“任务”已经结束了。 – 2012-03-23 15:41:11