/* * File: BinaryBaggingLearnerTest.java * Authors: Justin Basilico * Company: Sandia National Laboratories * Project: Cognitive Foundry * * Copyright October 8, 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.algorithm.ensemble; 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.math.matrix.Vectorizable; import gov.sandia.cognition.math.matrix.mtj.Vector2; import java.util.ArrayList; import java.util.Random; import junit.framework.TestCase; /** * This class implements JUnit tests for the following classes: * * BinaryBaggingLearner * * @author Justin Basilico * @since 2.0 */ public class BinaryBaggingLearnerTest extends TestCase { public BinaryBaggingLearnerTest( String testName ) { super( testName ); } public void testConstants() { assertEquals( 100, BinaryBaggingLearner.DEFAULT_MAX_ITERATIONS ); } public void testConstructors() { BinaryBaggingLearner<Vectorizable> instance = new BinaryBaggingLearner<Vectorizable>(); assertNull( instance.getLearner() ); assertEquals( BinaryBaggingLearner.DEFAULT_MAX_ITERATIONS, instance.getMaxIterations() ); assertNotNull( instance.getRandom() ); Perceptron learner = new Perceptron(); instance = new BinaryBaggingLearner<Vectorizable>( learner ); assertSame( learner, instance.getLearner() ); assertEquals( BinaryBaggingLearner.DEFAULT_MAX_ITERATIONS, instance.getMaxIterations() ); assertNotNull( instance.getRandom() ); int maxIterations = BinaryBaggingLearner.DEFAULT_MAX_ITERATIONS + 10; instance = new BinaryBaggingLearner<Vectorizable>( learner, maxIterations ); assertSame( learner, instance.getLearner() ); assertEquals( maxIterations, instance.getMaxIterations() ); assertNotNull( instance.getRandom() ); Random random = new Random(); instance = new BinaryBaggingLearner<Vectorizable>( learner, maxIterations, random ); assertSame( learner, instance.getLearner() ); assertEquals( maxIterations, instance.getMaxIterations() ); assertSame( random, instance.getRandom() ); } public void testLearn() { int numMembers = 50; Perceptron learner = new Perceptron(); BinaryBaggingLearner<Vectorizable> instance = new BinaryBaggingLearner<Vectorizable>( learner, numMembers ); 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<Vector2, Boolean>> examples = new ArrayList<InputOutputPair<Vector2, Boolean>>(); for (Vector2 example : positives) { examples.add( new DefaultInputOutputPair<Vector2, Boolean>( example, true ) ); } for (Vector2 example : negatives) { examples.add( new DefaultInputOutputPair<Vector2, Boolean>( example, false ) ); } WeightedBinaryEnsemble<Vectorizable, ?> learned = instance.learn( examples ); assertNotNull( learned ); assertSame( learned, instance.getResult() ); assertSame( learned, instance.getEnsemble() ); assertNull( instance.getDataList() ); assertEquals( numMembers, learned.getMembers().size() ); for (Vector2 example : positives) { assertTrue( learned.evaluate( example ) ); } for (Vector2 example : negatives) { assertFalse( learned.evaluate( example ) ); } numMembers = 2 * BinaryBaggingLearner.DEFAULT_MAX_ITERATIONS; instance.setMaxIterations( numMembers ); learned = instance.learn( examples ); assertNotNull( learned ); assertSame( learned, instance.getResult() ); assertSame( learned, instance.getEnsemble() ); assertNull( instance.getDataList() ); assertEquals( numMembers, learned.getMembers().size() ); for (Vector2 example : positives) { assertTrue( learned.evaluate( example ) ); } for (Vector2 example : negatives) { assertFalse( learned.evaluate( example ) ); } examples = new ArrayList<InputOutputPair<Vector2, Boolean>>(); learned = instance.learn( examples ); assertNull( learned ); learned = instance.learn( null ); assertNull( learned ); } /** * Test of getResult method, of class gov.sandia.cognition.learning.ensemble.BinaryBaggingLearner. */ public void testGetResult() { BinaryBaggingLearner<Vectorizable> instance = new BinaryBaggingLearner<Vectorizable>(); assertNull( instance.getResult() ); } /** * Test of getLearner method, of class gov.sandia.cognition.learning.ensemble.BinaryBaggingLearner. */ public void testGetLearner() { this.testSetLearner(); } /** * Test of setLearner method, of class gov.sandia.cognition.learning.ensemble.BinaryBaggingLearner. */ public void testSetLearner() { BinaryBaggingLearner<Vectorizable> instance = new BinaryBaggingLearner<Vectorizable>(); assertNull( instance.getLearner() ); Perceptron learner = new Perceptron(); instance.setLearner( learner ); assertSame( learner, instance.getLearner() ); instance.setLearner( null ); assertNull( instance.getLearner() ); } /** * Test of getRandom method, of class gov.sandia.cognition.learning.ensemble.BinaryBaggingLearner. */ public void testGetRandom() { this.testSetRandom(); } /** * Test of setRandom method, of class gov.sandia.cognition.learning.ensemble.BinaryBaggingLearner. */ public void testSetRandom() { BinaryBaggingLearner<Vectorizable> instance = new BinaryBaggingLearner<Vectorizable>(); assertNotNull( instance.getRandom() ); Random random = new Random(); instance.setRandom( random ); assertSame( random, instance.getRandom() ); random = new Random(); instance.setRandom( random ); assertSame( random, instance.getRandom() ); instance.setRandom( null ); assertNull( instance.getRandom() ); } /** * Test of getEnsemble method, of class gov.sandia.cognition.learning.ensemble.BinaryBaggingLearner. */ public void testGetEnsemble() { BinaryBaggingLearner<Vectorizable> instance = new BinaryBaggingLearner<Vectorizable>(); assertNull( instance.getEnsemble() ); } /** * Test of getDataList method, of class gov.sandia.cognition.learning.ensemble.BinaryBaggingLearner. */ public void testGetDataList() { BinaryBaggingLearner<Vectorizable> instance = new BinaryBaggingLearner<Vectorizable>(); assertNull( instance.getDataList() ); } }