/* Copyright (C) 2003 Univ. of Massachusetts Amherst, Computer Science Dept. This file is part of "MALLET" (MAchine Learning for LanguagE Toolkit). http://www.cs.umass.edu/~mccallum/mallet This software is provided under the terms of the Common Public License, version 1.0, as published by http://www.opensource.org. For further information, see the file `LICENSE' included with this distribution. */ package cc.mallet.fst; import java.util.logging.Logger; import cc.mallet.types.Instance; import cc.mallet.types.InstanceList; import cc.mallet.types.Sequence; import cc.mallet.util.MalletLogger; import java.text.NumberFormat; /** * Prints predicted and true label distribution. * * Created: March 31st, 2009 * * @author <A HREF="mailto:gdruck@cs.umass.edu>gdruck@cs.umass.edu</A> */ public class LabelDistributionEvaluator extends TransducerEvaluator { private static final Logger logger = MalletLogger.getLogger (InstanceAccuracyEvaluator.class.getName()); public LabelDistributionEvaluator (InstanceList[] instanceLists, String[] descriptions) { super (instanceLists, descriptions); } @Override public void evaluateInstanceList(TransducerTrainer transducer, InstanceList instances, String description) { double[] predCounts = new double[instances.getTargetAlphabet().size()]; double[] trueCounts = new double[instances.getTargetAlphabet().size()]; int total = 0; for (int i = 0; i < instances.size(); i++) { Instance instance = instances.get(i); Sequence trueOutput = (Sequence) instance.getTarget(); Sequence predOutput = (Sequence) transducer.getTransducer().transduce((Sequence)instance.getData()); for (int j = 0; j < predOutput.size(); j++) { total++; predCounts[instances.getTargetAlphabet().lookupIndex(predOutput.get(j))]++; trueCounts[instances.getTargetAlphabet().lookupIndex(trueOutput.get(j))]++; } } NumberFormat formatter = NumberFormat.getInstance(); formatter.setMaximumFractionDigits(4); for (int li = 0; li < predCounts.length; li++) { double ppred = predCounts[li] / total; double ptrue = trueCounts[li] / total; logger.info(description + " " + instances.getTargetAlphabet().lookupObject(li) + " predicted: " + formatter.format(ppred) + " - true: " + formatter.format(ptrue)); } } }