/*
* File: BinaryCategorizerSelectorTest.java
* Authors: Justin Basilico
* Company: Sandia National Laboratories
* Project: Cognitive Framework Lite
*
* Copyright October 9, 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.data.DefaultWeightedInputOutputPair;
import gov.sandia.cognition.learning.function.categorization.BinaryCategorizer;
import gov.sandia.cognition.learning.function.categorization.LinearBinaryCategorizer;
import junit.framework.*;
import gov.sandia.cognition.learning.data.WeightedInputOutputPair;
import gov.sandia.cognition.math.matrix.Vector;
import gov.sandia.cognition.math.matrix.mtj.Vector2;
import java.util.ArrayList;
import java.util.LinkedList;
/**
* This class implements JUnit tests for the following classes:
*
* BinaryCategorizerSelector
*
* @author Justin Basilico
* @since 2.0
*/
public class BinaryCategorizerSelectorTest
extends TestCase
{
/**
* Creates a new BinaryCategorizerSelectorTest.
*
* @param testName The test name.
*/
public BinaryCategorizerSelectorTest(
String testName)
{
super(testName);
}
/**
* Tests the constructors of BinaryCategorizerSelector.
*/
public void testConstructors()
{
BinaryCategorizerSelector<Vector> instance =
new BinaryCategorizerSelector<Vector>();
assertNotNull(instance.getCategorizers());
assertEquals(0, instance.getCategorizers().size());
LinkedList<BinaryCategorizer<? super Vector>> categorizers =
new LinkedList<BinaryCategorizer<? super Vector>>();
categorizers.add(new LinearBinaryCategorizer());
instance = new BinaryCategorizerSelector<Vector>(categorizers);
assertSame(categorizers, instance.getCategorizers());
}
/**
* Test of learn method, of class gov.sandia.cognition.learning.ensemble.BinaryCategorizerSelector.
*/
public void testLearn()
{
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<DefaultWeightedInputOutputPair<Vector2, Boolean>> examples =
new ArrayList<DefaultWeightedInputOutputPair<Vector2, Boolean>>();
for ( Vector2 example : positives )
{
examples.add(new DefaultWeightedInputOutputPair<Vector2, Boolean>(example, true, 1.0));
}
for ( Vector2 example : negatives )
{
examples.add(new DefaultWeightedInputOutputPair<Vector2, Boolean>(example, false, 1.0));
}
LinkedList<BinaryCategorizer<? super Vector>> categorizers =
new LinkedList<BinaryCategorizer<? super Vector>>();
LinearBinaryCategorizer categorizer1 =
new LinearBinaryCategorizer(new Vector2(-1.0, 0.0), 1.5);
LinearBinaryCategorizer categorizer2 =
new LinearBinaryCategorizer(new Vector2(-1.0, 0.0), 2.5);
categorizers.add(categorizer1);
categorizers.add(categorizer2);
BinaryCategorizerSelector<Vector> instance =
new BinaryCategorizerSelector<Vector>(categorizers);
BinaryCategorizer<? super Vector> learned = instance.learn(examples);
assertSame(categorizer1, learned);
// Categorizer 1 gets the third example wrong but categorizer 2 gets it
// right. Lets give it a lot of weight and make sure that categorizer 2
// is returned.
examples.get(3).setWeight(100.0);
learned = instance.learn(examples);
assertSame(categorizer2, learned);
}
/**
* Test of getCategorizers method, of class gov.sandia.cognition.learning.ensemble.BinaryCategorizerSelector.
*/
public void testGetCategorizers()
{
this.testSetCategorizers();
}
/**
* Test of setCategorizers method, of class gov.sandia.cognition.learning.ensemble.BinaryCategorizerSelector.
*/
public void testSetCategorizers()
{
BinaryCategorizerSelector<Vector> instance = new BinaryCategorizerSelector<Vector>();
assertNotNull(instance.getCategorizers());
assertEquals(0, instance.getCategorizers().size());
LinkedList<BinaryCategorizer<? super Vector>> categorizers =
new LinkedList<BinaryCategorizer<? super Vector>>();
categorizers.add(new LinearBinaryCategorizer());
instance.setCategorizers(categorizers);
assertSame(categorizers, instance.getCategorizers());
instance.setCategorizers(null);
assertNull(instance.getCategorizers());
}
}