/* Copyright 2003, Carnegie Mellon, All Rights Reserved */ package edu.cmu.minorthird.classify.multi; import javax.swing.JComponent; import edu.cmu.minorthird.classify.Classifier; import edu.cmu.minorthird.classify.Dataset; import edu.cmu.minorthird.classify.ExampleSchema; import edu.cmu.minorthird.classify.experiments.Evaluation; import edu.cmu.minorthird.util.ProgressCounter; import edu.cmu.minorthird.util.gui.ComponentViewer; import edu.cmu.minorthird.util.gui.ParallelViewer; import edu.cmu.minorthird.util.gui.Viewer; import edu.cmu.minorthird.util.gui.Visible; /** * Stores some detailed results of evaluating a classifier on data with multiple labels. * * @author Cameron Williams */ public class MultiEvaluation implements Visible{ Evaluation[] evals; MultiExampleSchema schema; /** Create an evaluation for databases with this schema */ public MultiEvaluation(MultiExampleSchema schema){ this.schema=schema; ExampleSchema[] exSchemas=schema.getSchemas(); evals=new Evaluation[exSchemas.length]; for(int i=0;i<evals.length;i++){ evals[i]=new Evaluation(exSchemas[i]); } } /** Test the classifier on the examples in the dataset and store the results. */ public void extend(MultiClassifier c,MultiDataset d){ ProgressCounter pc=new ProgressCounter("classifying","example",d.size()); Classifier[] classifiers=c.getClassifiers(); Dataset[] datasets=d.separateDatasets(); for(int i=0;i<evals.length;i++){ evals[i].extend(classifiers[i],datasets[i],1); } pc.progress(); pc.finished(); } /** Print summary statistics */ public void summarize(){ for(int i=0;i<evals.length;i++){ System.out.println("Dimension: "+i); double[] stats=evals[i].summaryStatistics(); String[] statNames=evals[i].summaryStatisticNames(); int maxLen=0; for(int j=0;j<statNames.length;j++){ maxLen=Math.max(statNames[j].length(),maxLen); } for(int j=0;j<statNames.length;j++){ System.out.print(statNames[j]+": "); for(int k=0;k<maxLen-statNames[j].length();k++) System.out.print(" "); System.out.println(stats[j]); } } } static public class EvaluationViewer extends ComponentViewer{ static final long serialVersionUID=20080130L; private int eval_num; public EvaluationViewer(int eval_num){ this.eval_num=eval_num; } @Override public JComponent componentFor(Object o){ MultiEvaluation me=(MultiEvaluation)o; Evaluation e=me.evals[eval_num]; return e.toGUI(); } } @Override public Viewer toGUI(){ ParallelViewer main=new ParallelViewer(); for(int i=0;i<evals.length;i++){ main.addSubView("Dimension: "+i,new EvaluationViewer(i)); } main.setContent(this); return main; } }