00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 package de.picana.clusterer;
00014
00015 import de.picana.control.*;
00016 import de.picana.logging.*;
00017
00018 import weka.core.*;
00019 import java.io.*;
00020
00021
00028 public class EM extends Clusterer {
00029
00030 private weka.clusterers.EM algo;
00031 private int max_iterations;
00032 private long time_total;
00033
00034
00036 public EM() {
00037 }
00038
00039 public void init(ParameterSet params, Logger logger) {
00040
00041 super.init(params, logger);
00042
00043 max_iterations = -1;
00044 try {
00045 max_iterations = Integer.parseInt((String)params.getParameter("max_iterations"));
00046 } catch (NumberFormatException nfe) {}
00047 }
00048
00049 public void buildClusterer(Instances set) throws TaskException {
00050
00051 try {
00052 statwriter.println("algo_clusterer_name:EM");
00053 statwriter.println("algo_clusterer_training_set:" + infile);
00054
00055 algo = new weka.clusterers.EM();
00056 algo.setNumClusters(num_clusters);
00057 if (max_iterations != -1) {
00058 algo.setMaxIterations(max_iterations);
00059 statwriter.println("algo_clusterer_maxiter:" + max_iterations);
00060 }
00061 time_total = System.currentTimeMillis();
00062 algo.buildClusterer(set);
00063 time_total = System.currentTimeMillis() - time_total;
00064 statwriter.println("time_clusterer_total:" + time_total);
00065 } catch (Exception e) {
00066 throw new TaskException(e.toString());
00067 }
00068 }
00069
00070 public void saveModel(String filename) throws TaskException {
00071
00072 try {
00073 File model = new File(filename);
00074 FileOutputStream fos = new FileOutputStream(model);
00075 ObjectOutputStream out = new ObjectOutputStream(fos);
00076
00077 out.writeInt(algo.numberOfClusters());
00078 out.writeObject(algo);
00079 out.close();
00080
00081 } catch (Exception e) {
00082 throw new TaskException(e.toString());
00083 }
00084 }
00085 }