Hi,
I've been working on this k-means clusterization program. I made mistake somewhere in the code, and program outputs only zeros. I tried to debug it, but I was not able to solve the problem.
I would like to ask for suggestions how to fix my program.
Thanks,
public class kmeans {
int clusters;
int[][]points = new int[6][2];
int[] classification = new int[6];
int[][] centres = new int[6][6];
int threshold=2;
public void inputdata(){
points[0][0]= 0;
points[0][1]= 0;
points[1][0]= 1;
points[1][1]= 1;
points[2][0]= 2;
points[2][1]= 2;
points[3][0]= 5;
points[3][1]= 3;
points[4][0]= 6;
points[4][1]= 6;
}
public void gensentres(){
for (int i=0; i<6; i++) {
centres[i][0]=(int)(Math.round(points[0][0]+10*Math.random()));
centres[i][1]=(int)(Math.round(points[0][1]+10*Math.random()));
}
}
public boolean distance(int x1, int y1, int x2, int y2) {
float d=0;
d = (float) Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
if (d< threshold) return true; else return false;
}
public void clussifypoints(){
for (int i=0; i<clusters; i++) {
for (int j=0; j<6; j++)
if (distance(centres[i][0], centres[i][1], points[j][0],
points[j][1])) {
classification[j]=i;
}
}
}
public void calcuatecentres(){
float xavg, yavg;
int n=0;
for (int i=0;i<clusters; i++){
xavg=0; yavg=0;
for(int j=0;j<6; j++) {
if (classification[i]==i) {
xavg = xavg+points[j][0];
yavg = yavg+points[j][1];
n++;
}
}
centres[i][0]=(int)xavg/n;
centres[i][1]=(int)yavg/n;
}
}
public void addcentre(){
clusters++;
}
public void mergecentres(){
clusters--;
}
public void printresults(){
for (int i=0;i<6; i++)
System.out.println(classification[i]);
}
public static void main(String[] args) {
kmeans k = new kmeans();
k.inputdata();
k.gensentres();
while (k.clusters!=2) {
k.clussifypoints();
k.calcuatecentres();
if (k.clusters<2) k.addcentre();
if (k.clusters>2) k.mergecentres();
}
k.printresults();
}
}