/* * File: SupervisedLearnerExperimentTest.java * Authors: Justin Basilico * Company: Sandia National Laboratories * Project: Cognitive Foundry * * Copyright September 27, 2007, 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. See CopyrightHistory.txt for * complete details. * */ package gov.sandia.cognition.learning.experiment; import gov.sandia.cognition.evaluator.Evaluator; import gov.sandia.cognition.learning.algorithm.perceptron.Perceptron; import gov.sandia.cognition.learning.data.DefaultInputOutputPair; import gov.sandia.cognition.learning.data.InputOutputPair; import gov.sandia.cognition.learning.performance.MeanZeroOneErrorEvaluator; import gov.sandia.cognition.math.matrix.Vector; import gov.sandia.cognition.math.matrix.mtj.Vector2; import gov.sandia.cognition.statistics.method.ConfidenceInterval; import gov.sandia.cognition.statistics.method.StudentTConfidence; import java.util.ArrayList; import junit.framework.TestCase; /** * This class implements JUnit tests for the following classes: * * @author Justin Basilico * @since 2.0 */ public class LearnerValidationExperimentTest extends TestCase { public static final double EPSILON = 1e-10; public LearnerValidationExperimentTest( String testName) { super(testName); } public void testConstructors() { LearnerValidationExperiment <InputOutputPair<Vector,Boolean>, InputOutputPair<Vector, Boolean>, Evaluator<? super Vector, ? extends Boolean>, Double, ConfidenceInterval> instance = new LearnerValidationExperiment <InputOutputPair<Vector,Boolean>, InputOutputPair<Vector, Boolean>, Evaluator<? super Vector, ? extends Boolean>, Double, ConfidenceInterval>(); assertNull(instance.getFoldCreator()); assertNull(instance.getPerformanceEvaluator()); assertNull(instance.getSummarizer()); LeaveOneOutFoldCreator<InputOutputPair<Vector, Boolean>> foldCreator = new LeaveOneOutFoldCreator<InputOutputPair<Vector, Boolean>>(); MeanZeroOneErrorEvaluator<Vector, Boolean> measure = new MeanZeroOneErrorEvaluator<Vector, Boolean>(); StudentTConfidence.Summary summarizer = new StudentTConfidence.Summary(0.95); instance = new LearnerValidationExperiment <InputOutputPair<Vector,Boolean>, InputOutputPair<Vector, Boolean>, Evaluator<? super Vector, ? extends Boolean>, Double, ConfidenceInterval>( foldCreator, measure, summarizer); assertSame(foldCreator, instance.getFoldCreator()); assertSame(measure, instance.getPerformanceEvaluator()); assertSame(summarizer, instance.getSummarizer()); } /** * Test of evaluate method, of class SupervisedLearnerExperiment. */ public void testEvaluate() { LeaveOneOutFoldCreator<InputOutputPair<Vector, Boolean>> foldCreator = new LeaveOneOutFoldCreator<InputOutputPair<Vector, Boolean>>(); MeanZeroOneErrorEvaluator<Vector, Boolean> measure = new MeanZeroOneErrorEvaluator<Vector, Boolean>(); StudentTConfidence.Summary summarizer = new StudentTConfidence.Summary(0.95); LearnerValidationExperiment <InputOutputPair<Vector,Boolean>, InputOutputPair<Vector, Boolean>, Evaluator<? super Vector, Boolean>, Double, ConfidenceInterval> instance = new LearnerValidationExperiment <InputOutputPair<Vector,Boolean>, InputOutputPair<Vector, Boolean>, Evaluator<? super Vector, Boolean>, Double, ConfidenceInterval>( foldCreator, measure, summarizer); Vector2[] positives = new Vector2[] { new Vector2(1.00, 1.00), new Vector2(1.00, 3.00), new Vector2(0.25, 4.00), new Vector2(2.00, 1.00), new Vector2(5.00, -3.00) }; Vector2[] negatives = new Vector2[] { new Vector2(2.00, 3.00), new Vector2(2.00, 4.00), new Vector2(3.00, 2.00), new Vector2(4.25, 3.75), new Vector2(4.00, 7.00), new Vector2(7.00, 4.00) }; ArrayList<InputOutputPair<Vector, Boolean>> examples = new ArrayList<InputOutputPair<Vector, Boolean>>(); for ( Vector2 example : positives ) { examples.add(new DefaultInputOutputPair<Vector, Boolean>(example, true)); } for ( Vector2 example : negatives ) { examples.add(new DefaultInputOutputPair<Vector, Boolean>(example, false)); } Perceptron learner = new Perceptron(); ConfidenceInterval result =instance.evaluatePerformance(learner, examples); assertNotNull(result); assertEquals(1.0 / examples.size(), result.getCentralValue(), EPSILON); assertEquals(examples.size(), instance.getNumTrials()); assertEquals(examples.size(), instance.getStatistics().size()); assertSame(result, instance.getSummary()); } /** * Test of getFoldCreator method, of class SupervisedLearnerExperiment. */ public void testGetFoldCreator() { this.testSetFoldCreator(); } /** * Test of setFoldCreator method, of class SupervisedLearnerExperiment. */ public void testSetFoldCreator() { LearnerValidationExperiment <InputOutputPair<Vector,Boolean>, InputOutputPair<Vector, Boolean>, Evaluator<Vector, Boolean>, Double, ConfidenceInterval> instance = new LearnerValidationExperiment <InputOutputPair<Vector,Boolean>, InputOutputPair<Vector, Boolean>, Evaluator<Vector, Boolean>, Double, ConfidenceInterval>(); assertNull(instance.getFoldCreator()); LeaveOneOutFoldCreator<InputOutputPair<Vector, Boolean>> foldCreator = new LeaveOneOutFoldCreator<InputOutputPair<Vector, Boolean>>(); instance.setFoldCreator(foldCreator); assertSame(foldCreator, instance.getFoldCreator()); instance.setFoldCreator(null); assertNull(instance.getFoldCreator()); } /** * Test of getMeasure method, of class SupervisedLearnerExperiment. */ public void testGetPerformanceEvaluator() { this.testSetPerformanceEvaluator(); } /** * Test of setMeasure method, of class SupervisedLearnerExperiment. */ public void testSetPerformanceEvaluator() { LearnerValidationExperiment <InputOutputPair<Vector,Boolean>, InputOutputPair<Vector, Boolean>, Evaluator<Vector,Boolean>, Double, ConfidenceInterval> instance = new LearnerValidationExperiment <InputOutputPair<Vector,Boolean>, InputOutputPair<Vector, Boolean>, Evaluator<Vector,Boolean>, Double, ConfidenceInterval>(); assertNull(instance.getPerformanceEvaluator()); MeanZeroOneErrorEvaluator<Vector, Boolean> measure = new MeanZeroOneErrorEvaluator<Vector, Boolean>(); instance.setPerformanceEvaluator(measure); assertSame(measure, instance.getPerformanceEvaluator()); instance.setPerformanceEvaluator(null); assertNull(instance.getPerformanceEvaluator()); } /** * Test of getSummarizer method, of class SupervisedLearnerExperiment. */ public void testGetSummarizer() { this.testSetSummarizer(); } /** * Test of setSummarizer method, of class SupervisedLearnerExperiment. */ public void testSetSummarizer() { LearnerValidationExperiment <InputOutputPair<Vector,Boolean>, InputOutputPair<Vector, Boolean>, Evaluator<Vector, Boolean>, Double, ConfidenceInterval> instance = new LearnerValidationExperiment <InputOutputPair<Vector,Boolean>, InputOutputPair<Vector, Boolean>, Evaluator<Vector, Boolean>, Double, ConfidenceInterval>(); assertNull(instance.getSummarizer()); StudentTConfidence.Summary summarizer = new StudentTConfidence.Summary(0.95); instance.setSummarizer(summarizer); assertSame(summarizer, instance.getSummarizer()); instance.setSummarizer(null); assertNull(instance.getSummarizer()); } /** * Test of getNumTrials method, of class SupervisedLearnerExperiment. */ public void testGetNumTrials() { LearnerValidationExperiment <InputOutputPair<Vector,Boolean>, InputOutputPair<Vector, Boolean>, Evaluator<Vector, Boolean>, Double, ConfidenceInterval> instance = new LearnerValidationExperiment <InputOutputPair<Vector,Boolean>, InputOutputPair<Vector, Boolean>, Evaluator<Vector, Boolean>, Double, ConfidenceInterval>(); assertEquals(-1, instance.getNumTrials()); } /** * Test of getStatistics method, of class SupervisedLearnerExperiment. */ public void testGetStatistics() { // Tested by evaluate. } /** * Test of getSummary method, of class SupervisedLearnerExperiment. */ public void testGetSummary() { // Tested by evaluate. } }