kmeancluster.java
来自「it is Also Kmeans Algorithm in java.」· Java 代码 · 共 102 行
JAVA
102 行
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package clusteranalysis;public class KMeanCluster { private double[][] data; private int groups; private double[][] centers; private double[] distances; public int[] indices; public KMeanCluster(double[][] data,int groups){ this.data=data; this.groups=groups; this.centers=new double[groups][data[0].length]; distances=new double[groups]; indices=new int[data.length]; for (int i=0;i<indices.length;i++) indices[i]=9; int m; for (int i=0;i<this.centers.length;i++){ centers[i]=data[i]; } } public double euclid(double[] d1,double[] d2){ double result=0.0; for (int i=0;i<d1.length;i++) result+=Math.pow(d1[i]-d2[i],2.0); return (Math.sqrt(result)); } public double[] Sum(double[] d1,double[] d2){ double[] result=new double[d1.length]; for (int i=0;i<d1.length;i++) result[i]=d1[i]+d2[i]; return (result); } public double[] Devide(double[] d1,double b){ double[] result=new double[d1.length]; for (int i=0;i<d1.length;i++) result[i]=d1[i]/b; return (result); } public void updateCenters(){ double mindis; int[] ns=new int[groups]; double distance; for (int i=0;i<data.length;i++){ mindis=999999999; //indices[i]=-1; for (int j=0;j<centers.length;j++){ distance=euclid(data[i],centers[j]); if (distance<mindis) { //System.out.println(distance+" is smaller than "+mindis+" and obs "+i+" is belong to grp "+j ); mindis=distance; indices[i]=j; } } } centers=new double[groups][data[0].length]; for (int i=0;i<indices.length;i++){ centers[indices[i]]=Sum(centers[indices[i]],data[i]); ns[indices[i]]++; } for (int i=0;i<centers.length;i++){ centers[i]=Devide(centers[i],ns[i]); } } public void printIndices(){ for (int i=0;i<data.length;i++) System.out.print(indices[i]); System.out.print(" - "); for (int i=0;i<centers.length;i++) { for (int j=0;j<centers[0].length;j++){ System.out.print(centers[i][j]+" "); } } System.out.println(); } public void doIt(){ for (int iter=0;iter<50;iter++){ this.updateCenters();this.printIndices(); } } }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?