我在为Java中的KMeans集群生成代码时遇到了麻烦。我已经知道了算法但是很难用java代码编写。 我的任务是从数据库中检索数据然后运行带有KMeans的群集,在这种情况下,首先必须在递归二叉树结构中形成数据。 方案是
首先创建父节点,如果parent为NULL,则设置global_iteration = 0
创建节点及其与父级的关系
将数据库中的所有数据(我使用JDBC)转发给父母(接下来我们将其称为数据集)
如果数据集< outlierSize,将此节点标记为异常值(outlierSize由程序员声明)然后停止。
如果数据集< maxIteration(由程序员说明)然后停止
从数据集计算质心(在这种情况下是2因为我们构建二叉树)
Cal KMeans班
global_iteration ++
:继续递归。
然后我们必须创建一个将被调用的类KMeans插入节点。
K均值(数据集,K,maxIteration,minChange)
备注:k =簇的数量,minChange:质心变化期间的值是是否仍应处理群集的参数。 Kmeans聚类与commong KMeans算法相同。
非常感谢你帮我完成这项任务:)
答案 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++;
}