We're a community of 1.1M IT Pros here for help, advice, solutions, professional growth and fun. Join us!
1,080,599 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Start New Discussion Reply to this Discussion

Java K-means problem

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();
}


}
2
Contributors
1
Reply
18 Minutes
Discussion Span
1 Year Ago
Last Updated
2
Views
DreamTheater85
Newbie Poster
1 post since Apr 2012
Reputation Points: 0
Solved Threads: 0
Skill Endorsements: 0

How did you try to debug it? I don't see many printlns statements to show the changes in the variables and the execution flow.
You need to print out everything so you can see what the computer sees. If you understand how the code is supposed to work, when you see what it is doing you should be able to change it so that it does what you want it to do.

Can you post the program's output and explain what is wrong with the output and show what the output should be.

NormR1
Posting Sage
Team Colleague
7,742 posts since Jun 2010
Reputation Points: 1,158
Solved Threads: 793
Skill Endorsements: 16

This article has been dead for over three months: Start a new discussion instead

Post: Markdown Syntax: Formatting Help
 
You
View similar articles that have also been tagged:
 
© 2013 DaniWeb® LLC
Page generated in 0.0840 seconds using 2.73MB