1、K-Means算法java实现:
public class BasicKMeans {
public static void main(String[] args) {
// TODO Auto-generated method stub
double[] p = { 1, 2, 3, 5, 6, 7, 9, 10, 11, 100, 150, 200, 1000 };
int k = 5;
double[][] g;
g = cluster(p, k);
for (int i = 0; i < g.length; i++) {
for (int j = 0; j < g[i].length; j++) {
System.out.print(g[i][j]);
System.out.print("\t");
}
System.out.println();
}
}
public static double[][] cluster(double[] p, int k) {
// 存放聚类旧的聚类中心
double[] c = new double[k];
// 存放新计算的聚类中心
double[] nc = new double[k];
// 存放放回结果
double[][] g;
// 初始化聚类中心
// 经典方法是随机选取 k 个
// 本例中采用前 k 个作为聚类中心
// 聚类中心的选取不影响最终结果
for (int i = 0; i < k; i++)
c[i] = p[i];
// 循环聚类,更新聚类中心
// 到聚类中心不变为止
while (true) {
// 根据聚类中心将元素分类
g = group(p, c);
// 计算分类后的聚类中心
for (int i = 0; i < g.length; i++) {
nc[i] = center(g[i]);
}
// 如果聚类中心不同
if (!equal(nc, c)) {
// 为下一次聚类准备
c = nc;
nc = new double[k];
} else // 聚类结束
break;
}
// 返回聚类结果
return g;
}
public static double center(double[] p) {
return sum(p) / p.length;
}
public static double[][] group(double[] p, double[] c) {