import java.util.*; class k_means { static int count1,count2,count3; static int d[]; static int k[][]; static int tempk[][]; static double m[]; static double diff[]; static int n,p; static int cal_diff(int a) // This method will determine the cluster in which an element go at a particular step. { int temp1=0; for(int i=0; i<p; ++i) { if(a>m[i]) diff[i]=a-m[i]; else diff[i]=m[i]-a; } int val=0; double temp=diff[0]; for(int i=0; i<p; ++i) { if(diff[i]<temp) { temp=diff[i]; val=i; } }//end of for loop return val; } static void cal_mean() // This method will determine intermediate mean values { for(int i=0; i<p; ++i) m[i]=0; // initializing means to 0 int cnt=0; for(int i=0; i<p; ++i) { cnt=0; for(int j=0; j<n-1; ++j) { if(k[i][j]!=-1) { m[i]+=k[i][j]; ++cnt; } } m[i]=m[i]/cnt; } } static int check1() // This checks if previous k ie. tempk and current k are same.Used as terminating case. { for(int i=0; i<p; ++i) for(int j=0; j<n; ++j) if(tempk[i][j]!=k[i][j]) { return 0; } return 1; } public static void main(String args[]) { Scanner scr=new Scanner(System.in); /* Accepting number of elements */ System.out.println("Enter the number of elements "); n=scr.nextInt(); d=new int[n]; /* Accepting elements */ System.out.println("Enter "+n+" elements: "); for(int i=0; i<n; ++i) d[i]=scr.nextInt(); /* Accepting num of clusters */ System.out.println("Enter the number of clusters: "); p=scr.nextInt(); /* Initialising arrays */ k=new int[p][n]; tempk=new int[p][n]; m=new double[p]; diff=new double[p]; /* Initializing m */ for(int i=0; i<p; ++i) m[i]=d[i]; int temp=0; int flag=0; do { for(int i=0; i<p; ++i) for(int j=0; j<n; ++j) { k[i][j]=-1; } for(int i=0; i<n; ++i) // for loop will cal cal_diff(int) for every element. { temp=cal_diff(d[i]); if(temp==0) k[temp][count1++]=d[i]; else if(temp==1) k[temp][count2++]=d[i]; else if(temp==2) k[temp][count3++]=d[i]; } cal_mean(); // call to method which will calculate mean at this step. flag=check1(); // check if terminating condition is satisfied. if(flag!=1) /*Take backup of k in tempk so that you can check for equivalence in next step*/ for(int i=0; i<p; ++i) for(int j=0; j<n; ++j) tempk[i][j]=k[i][j]; System.out.println("\n\nAt this step"); System.out.println("\nValue of clusters"); for(int i=0; i<p; ++i) { System.out.print("K"+(i+1)+"{ "); for(int j=0; k[i][j]!=-1 && j<n-1; ++j) System.out.print(k[i][j]+" "); System.out.println("}"); }//end of for loop System.out.println("\nValue of m "); for(int i=0; i<p; ++i) System.out.print("m"+(i+1)+"="+m[i]+" "); count1=0; count2=0; count3=0; } while(flag==0); System.out.println("\n\n\nThe Final Clusters By Kmeans are as follows: "); for(int i=0; i<p; ++i) { System.out.print("K"+(i+1)+"{ "); for(int j=0; k[i][j]!=-1 && j<n-1; ++j) System.out.print(k[i][j]+" "); System.out.println("}"); } } }
--
You received this message because you are subscribed to the Google Groups "Druid User" group.
To unsubscribe from this group and stop receiving emails from it, send an email to druid-user+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/druid-user/e01dbb38-43ef-45b3-8bbb-27dec0f25a20n%40googlegroups.com.