/* * File: WeightedBinaryEnsembleTest.java * Authors: Justin Basilico * Company: Sandia National Laboratories * Project: Cognitive Framework Lite * * Copyright September 25, 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.function.categorization.KernelBinaryCategorizer; import gov.sandia.cognition.learning.function.categorization.LinearBinaryCategorizer; import gov.sandia.cognition.learning.function.categorization.BinaryCategorizer; import gov.sandia.cognition.learning.function.kernel.PolynomialKernel; import gov.sandia.cognition.math.matrix.Vector; import gov.sandia.cognition.math.matrix.Vectorizable; import gov.sandia.cognition.math.matrix.mtj.Vector3; import gov.sandia.cognition.util.DefaultWeightedValue; import gov.sandia.cognition.util.WeightedValue; import java.util.ArrayList; import junit.framework.TestCase; /** * This class implements JUnit tests for WeightedBinaryEnsembleTest * * @author Justin Basilico * @since 2.0 */ public class WeightedBinaryEnsembleTest extends TestCase { public WeightedBinaryEnsembleTest( String testName) { super(testName); } public void testConstants() { assertEquals(1.0, WeightedBinaryEnsemble.DEFAULT_WEIGHT); } public void testConstructors() { WeightedBinaryEnsemble<Vector, BinaryCategorizer<Vector>> instance = new WeightedBinaryEnsemble<Vector, BinaryCategorizer<Vector>>(); assertNotNull(instance.getMembers()); assertTrue(instance.getMembers().isEmpty()); ArrayList<WeightedValue<BinaryCategorizer<Vector>>> members = new ArrayList<WeightedValue<BinaryCategorizer<Vector>>> (); members.add(new DefaultWeightedValue<BinaryCategorizer<Vector>>( new KernelBinaryCategorizer<Vector, WeightedValue<Vector>>(new PolynomialKernel(2)), Math.random())); instance = new WeightedBinaryEnsemble<Vector, BinaryCategorizer<Vector>>( members); assertSame(members, instance.getMembers()); } /** * Test of add method, of class gov.sandia.cognition.learning.ensemble.WeightedBinaryEnsemble. */ public void testAdd() { WeightedBinaryEnsemble<Vector, BinaryCategorizer<Vector>> instance = new WeightedBinaryEnsemble<Vector, BinaryCategorizer<Vector>>(); KernelBinaryCategorizer<Vector, WeightedValue<Vector>> member = new KernelBinaryCategorizer<Vector, WeightedValue<Vector>>(new PolynomialKernel(2)); instance.add(member); assertEquals(1, instance.getMembers().size()); assertSame(member, instance.getMembers().get(0).getValue()); assertEquals(WeightedBinaryEnsemble.DEFAULT_WEIGHT, instance.getMembers().get(0).getWeight()); member = new KernelBinaryCategorizer<Vector, WeightedValue<Vector>>(new PolynomialKernel(4)); double weight = Math.random(); instance.add(member, weight); assertEquals(2, instance.getMembers().size()); assertSame(member, instance.getMembers().get(1).getValue()); assertEquals(weight, instance.getMembers().get(1).getWeight()); } /** * Test of evaluate method, of class gov.sandia.cognition.learning.ensemble.WeightedBinaryEnsemble. */ public void testEvaluate() { WeightedBinaryEnsemble<Vector, BinaryCategorizer<Vectorizable>> instance = new WeightedBinaryEnsemble<Vector, BinaryCategorizer<Vectorizable>>(); assertTrue(instance.evaluate(new Vector3(Math.random(), Math.random(), Math.random()))); LinearBinaryCategorizer categorizer = new LinearBinaryCategorizer( new Vector3(Math.random(), Math.random(), Math.random()), Math.random()); instance.add(categorizer); int count = 10; for (int i = 0; i < count; i++) { Vector input = new Vector3(Math.random(), Math.random(), Math.random()); Boolean expected = categorizer.evaluate(input); assertEquals(expected, instance.evaluate(input)); } instance.add(categorizer, -3.0); for (int i = 0; i < count; i++) { Vector input = new Vector3(Math.random(), Math.random(), Math.random()); Boolean expected = !categorizer.evaluate(input); assertEquals(expected, instance.evaluate(input)); } } /** * Test of evaluateAsDouble method, of class gov.sandia.cognition.learning.ensemble.WeightedBinaryEnsemble. */ public void testEvaluateAsDouble() { WeightedBinaryEnsemble<Vector, BinaryCategorizer<Vectorizable>> instance = new WeightedBinaryEnsemble<Vector, BinaryCategorizer<Vectorizable>>(); assertEquals(0.0, instance.evaluateAsDouble(new Vector3(Math.random(), Math.random(), Math.random()))); LinearBinaryCategorizer categorizer = new LinearBinaryCategorizer( new Vector3(Math.random(), Math.random(), Math.random()), Math.random()); instance.add(categorizer); int count = 10; for (int i = 0; i < count; i++) { Vector input = new Vector3(Math.random(), Math.random(), Math.random()); double expected = categorizer.evaluate(input) ? +1.0 : -1.0; assertEquals(expected, instance.evaluateAsDouble(input)); } instance.add(categorizer, -3.0); for (int i = 0; i < count; i++) { Vector input = new Vector3(Math.random(), Math.random(), Math.random()); double expected = !categorizer.evaluate(input) ? +0.5 : -0.5; assertEquals(expected, instance.evaluateAsDouble(input)); } } /** * Test of getMembers method, of class gov.sandia.cognition.learning.ensemble.WeightedBinaryEnsemble. */ public void testGetMembers() { this.testSetMembers(); } /** * Test of setMembers method, of class gov.sandia.cognition.learning.ensemble.WeightedBinaryEnsemble. */ public void testSetMembers() { WeightedBinaryEnsemble<Vector, BinaryCategorizer<Vector>> instance = new WeightedBinaryEnsemble<Vector, BinaryCategorizer<Vector>>(); ArrayList<WeightedValue<BinaryCategorizer<Vector>>> members = new ArrayList<WeightedValue<BinaryCategorizer<Vector>>>(); members.add(new DefaultWeightedValue<BinaryCategorizer<Vector>>( new KernelBinaryCategorizer<Vector, WeightedValue<Vector>>(new PolynomialKernel(2)), Math.random())); instance.setMembers(members); assertSame(members, instance.getMembers()); instance.setMembers(null); assertNull(instance.getMembers()); } }