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 + -
显示快捷键?