/* * File: CategoryBalancedBaggingLearnerTest.java * Authors: Justin Basilico * Company: Sandia National Laboratories * Project: Cognitive Foundry Learning Core * * Copyright June 15, 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.algorithm.ensemble; import gov.sandia.cognition.learning.data.DefaultInputOutputPair; import gov.sandia.cognition.learning.data.InputOutputPair; import gov.sandia.cognition.learning.function.categorization.LinearBinaryCategorizer; import gov.sandia.cognition.math.matrix.VectorFactory; import gov.sandia.cognition.util.WeightedValue; import java.util.ArrayList; import java.util.Random; import gov.sandia.cognition.learning.algorithm.perceptron.Perceptron; import gov.sandia.cognition.math.matrix.Vector; import org.junit.Test; import static org.junit.Assert.*; /** * Unit test for class CategoryBalancedBaggingLearner. * * @author Justin Basilico * @since 3.3.0 */ public class CategoryBalancedBaggingLearnerTest { /** Random number generator to use. */ protected Random random = new Random(211); /** * Creates a new test. */ public CategoryBalancedBaggingLearnerTest() { } /** * Test of constructors of class CategoryBalancedBaggingLearner. */ @Test public void testConstructors() { Perceptron learner = null; double percentToSample = BaggingCategorizerLearner.DEFAULT_PERCENT_TO_SAMPLE; int maxIterations = BaggingCategorizerLearner.DEFAULT_MAX_ITERATIONS; CategoryBalancedBaggingLearner<Vector, Boolean> instance = new CategoryBalancedBaggingLearner<Vector, Boolean>(); assertSame(learner, instance.getLearner()); assertEquals(percentToSample, instance.getPercentToSample(), 0.0); assertEquals(maxIterations, instance.getMaxIterations()); assertNotNull(instance.getRandom()); learner = new Perceptron(); instance = new CategoryBalancedBaggingLearner<Vector, Boolean>(learner); assertSame(learner, instance.getLearner()); assertEquals(percentToSample, instance.getPercentToSample(), 0.0); assertEquals(maxIterations, instance.getMaxIterations()); assertNotNull(instance.getRandom()); percentToSample = percentToSample / 3.4; maxIterations = maxIterations * 9; instance = new CategoryBalancedBaggingLearner<Vector, Boolean>(learner, maxIterations, percentToSample, random); assertSame(learner, instance.getLearner()); assertEquals(percentToSample, instance.getPercentToSample(), 0.0); assertEquals(maxIterations, instance.getMaxIterations()); assertSame(random, instance.getRandom()); } /** * Test of learn method, of class CategoryBalancedBaggingLearner. */ @Test public void testLearn() { CategoryBalancedBaggingLearner<Vector, Boolean> instance = new CategoryBalancedBaggingLearner<Vector, Boolean>(); instance.setLearner(new Perceptron()); instance.setRandom(random); instance.setMaxIterations(5); instance.setPercentToSample(0.5); assertNull(instance.getResult()); ArrayList<InputOutputPair<Vector, Boolean>> data = new ArrayList<InputOutputPair<Vector, Boolean>>(); VectorFactory<?> vectorFactory = VectorFactory.getDefault(); for (int i = 0; i < 100; i++) { data.add(new DefaultInputOutputPair<Vector, Boolean>( vectorFactory.createUniformRandom( 14, 0.0, 1.0, random), true)); } for (int i = 0; i < 2; i++) { data.add(new DefaultInputOutputPair<Vector, Boolean>( vectorFactory.createUniformRandom( 14, -1.0, 0.0, random), false)); } WeightedVotingCategorizerEnsemble<Vector, Boolean, ?> result = instance.learn(data); assertSame(result, instance.getResult()); assertEquals(5, result.getMembers().size()); for (WeightedValue<?> member : result.getMembers()) { assertEquals(1.0, member.getWeight(), 0.0); assertNotNull(member.getValue()); assertTrue(member.getValue() instanceof LinearBinaryCategorizer); } } }