package weka.clusterers;
import java.util.*;
import weka.core.*;
public class NaiveKMeans extends Clusterer{
public boolean doEvaluate=false;
public void buildClusterer(Instances data) throws Exception{
super.buildClusterer(data);
if(doEvaluate)System.out.print(evaluate());
}
public String evaluate() throws Exception{
String string=super.evaluate();
if(!doEvaluate)return string;
for(int i=0,I;i<K;i++){
string+="Cluster "+i+":";
I=instanceses[i].numInstances();
double [] distances=new double[I];
double [] dis=new double[I];
int [] indexes=new int[I];
double distance;
for(int j=0;j<I;j++){
distance=metric.distance(centroids.instance(i),instanceses[i].instance(j));
distances[j]=distance;
dis[j]=distance;
indexes[j]=((Integer)(clusters[i].get(j))).intValue();
}
Arrays.sort(dis);
for(int j=0;j<20&&j<I;j++){
for(int k=0;k<I;k++){
if(distances[k]==dis[j]){
string+="\tcenter: "+indexes[k];
break;
}
}
}
for(int j=I-1;j>I-21&&j>-1;j--){
for(int k=0,kk=I;k<kk;k++){
if(distances[k]==dis[j]){
string+="\tcircle: "+indexes[k];
break;
}
}
}
}
return string;
}
public static void main(String [] argv){
try{
System.out.println(ClusterEvaluation.evaluateClusterer(new NaiveKMeans(),argv));
}catch(Exception e){
System.out.println(e.getMessage());
e.printStackTrace();
}
}
}