Posts Tagged ‘K-means clustering in java’

Problem Definition: Write a program to implement K-means Clustering algorithm

Solution:

import java.io.*;
import java.util.*;
class Kmeans{
 public static void main(String args[])throws IOException{
 BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
 System.out.println("Enter the number of values to be evaluated(n):");
 int n=Integer.parseInt(br.readLine());
 int a[]=new int[n];
 System.out.println("Enter values in the same line:");
 String s[]=br.readLine().split(" ");
 for(int i=0;i<n;i++)
 a[i]=Integer.parseInt(s[i]);
 System.out.println("Enter the number of clusters(k):");
 ArrayList<ArrayList<Integer>> clusters=new ArrayList<ArrayList<Integer>>();
 int k=Integer.parseInt(br.readLine());
 float mean[][]=new float[k][2];
 for(int i=0;i<k;i++)
 mean[i][0]=a[i]; //it can be randomized as well
 int size,count=0,index=0;
 float temp,temp1=0,min=1000;
 do{
 clusters=new ArrayList<ArrayList<Integer>>();
 for(int i=0;i<k;i++)
 clusters.add(new ArrayList<Integer>());
 for(int i=0;i<n;i++,min=1000){
 for(int j=0;j<k;j++){
 temp=Math.abs(a[i]-mean[j][0]);
 if(temp<min){
 index=j;
 min=temp;
 }
 }
 clusters.get(index).add(a[i]);
 }
 for(int i=0;i<k;i++,temp1=0){
 size=clusters.get(i).size();
 for(int j=0;j<size;j++)
 temp1+=clusters.get(i).get(j);
 mean[i][1]=temp1/size;
 }
 System.out.println(clusters);
 count=0;
 for(int i=0;i<k;i++){
 if(mean[i][0]==mean[i][1])
 count++;
 mean[i][0]=mean[i][1];
 }
 }while(count!=k);
 }
}

 

Output:

Kmeans