/* * File: ConfusionMatrixPerformanceEvaluator.java * Authors: Justin Basilico * Company: Sandia National Laboratories * Project: Cognitive Foundry Learning Core * * Copyright January 11, 2011, Sandia Corporation. * Under the terms of Contract DE-AC04-94AL85000, there is a non-exclusive * license for use of this work by or on behalf of the U.S. Government. Export * of this program may require a license from the United States Government. */ package gov.sandia.cognition.learning.performance.categorization; import gov.sandia.cognition.factory.DefaultFactory; import gov.sandia.cognition.factory.Factory; import gov.sandia.cognition.factory.PrototypeFactory; import gov.sandia.cognition.learning.data.TargetEstimatePair; import gov.sandia.cognition.learning.performance.AbstractSupervisedPerformanceEvaluator; import gov.sandia.cognition.util.AbstractCloneableSerializable; import java.util.Collection; /** * A performance evaluator that builds a confusion matrix. * * @param <InputType> * The input type of the object to evaluate the performance of. * @param <CategoryType> * The category type (output type) to build the confusion matrix over, * which is the also the output type of the object to evaluate the * performance of. * @author Justin Basilico * @since 3.1 */ public class ConfusionMatrixPerformanceEvaluator<InputType, CategoryType> extends AbstractSupervisedPerformanceEvaluator<InputType, CategoryType, CategoryType, ConfusionMatrix<CategoryType>> { /** The factory used to create the confusion matrix of the evaluator. */ protected Factory<? extends ConfusionMatrix<CategoryType>> factory; /** * Creates a new {@code ConfusionMatrixPerformanceEvaluator} with a * default factory behind it. */ @SuppressWarnings(value={"unchecked"}) public ConfusionMatrixPerformanceEvaluator() { this(new DefaultConfusionMatrix.Factory<CategoryType>()); } /** * Creates a new {@code ConfusionMatrixPerformanceEvaluator} using the given * factory. * * @param factory * The factory used to create the matrix from the evaluator. */ public ConfusionMatrixPerformanceEvaluator( final Factory<? extends ConfusionMatrix<CategoryType>> factory) { super(); this.setFactory(factory); } @Override public ConfusionMatrix<CategoryType> evaluatePerformance( final Collection<? extends TargetEstimatePair<? extends CategoryType, ? extends CategoryType>> data) { // Create the confusion matrix and add each target-estimate pair to it. final ConfusionMatrix<CategoryType> result = this.getFactory().create(); for (TargetEstimatePair<? extends CategoryType, ? extends CategoryType> pair : data) { result.add(pair.getTarget(), pair.getEstimate()); } return result; } /** * Gets the factory for the confusion matrix the evaluator creates. * * @return * The factory for the confusion matrix. */ public Factory<? extends ConfusionMatrix<CategoryType>> getFactory() { return this.factory; } /** * Sets the factory for the confusion matrix the evaluator creates. * * @param factory * The factory for the confusion matrix. */ public void setFactory( final Factory<? extends ConfusionMatrix<CategoryType>> factory) { this.factory = factory; } }