/*
* File: BaggingRegressionLearnerTest.java
* Authors: Justin Basilico
* Project: Cognitive Foundry Learning Core
*
* Copyright 2011 Cognitive Foundry. All rights reserved.
*/
package gov.sandia.cognition.learning.algorithm.ensemble;
import gov.sandia.cognition.learning.function.scalar.LinearDiscriminantWithBias;
import gov.sandia.cognition.learning.algorithm.regression.LinearRegression;
import gov.sandia.cognition.learning.data.DefaultInputOutputPair;
import gov.sandia.cognition.learning.data.InputOutputPair;
import gov.sandia.cognition.math.matrix.Vector;
import gov.sandia.cognition.math.matrix.VectorFactory;
import java.util.ArrayList;
import java.util.Random;
import junit.framework.TestCase;
import static org.junit.Assert.*;
/**
* Unit tests for class BaggingRegressionLearner.
*
* @author Justin Basilico
* @since 3.3.3
*/
public class BaggingRegressionLearnerTest
extends TestCase
{
protected Random random;
/**
* Creates a new test.
*
* @param testName The test name.
*/
public BaggingRegressionLearnerTest(
String testName)
{
super(testName);
this.random = new Random();
}
/**
* Test of constructors of class BaggingRegressionLearner.
*/
public void testConstructors()
{
LinearRegression learner = null;
double percentToSample = BaggingCategorizerLearner.DEFAULT_PERCENT_TO_SAMPLE;
int maxIterations = BaggingCategorizerLearner.DEFAULT_MAX_ITERATIONS;
BaggingRegressionLearner<Vector> instance =
new BaggingRegressionLearner<Vector>();
assertSame(learner, instance.getLearner());
assertEquals(percentToSample, instance.getPercentToSample(), 0.0);
assertEquals(maxIterations, instance.getMaxIterations());
assertNotNull(instance.getRandom());
learner = new LinearRegression();
instance = new BaggingRegressionLearner<Vector>(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 BaggingRegressionLearner<Vector>(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 BaggingCategorizerLearner.
*/
public void testLearn()
{
BaggingRegressionLearner<Vector> instance =
new BaggingRegressionLearner<Vector>();
instance.setLearner(new LinearRegression());
instance.setRandom(random);
instance.setMaxIterations(5);
instance.setPercentToSample(0.5);
assertNull(instance.getResult());
ArrayList<InputOutputPair<Vector, Double>> data =
new ArrayList<InputOutputPair<Vector, Double>>();
VectorFactory<?> vectorFactory = VectorFactory.getDefault();
for (int i = 0; i < 10; i++)
{
data.add(new DefaultInputOutputPair<Vector, Double>(
vectorFactory.createUniformRandom(
14, 0.0, 1.0, random), random.nextDouble() + 1.0));
}
for (int i = 0; i < 5; i++)
{
data.add(new DefaultInputOutputPair<Vector, Double>(
vectorFactory.createUniformRandom(
14, -1.0, 0.0, random), -(random.nextDouble() - 1.0)));
}
AveragingEnsemble<Vector, ?> result = instance.learn(data);
assertSame(result, instance.getResult());
assertEquals(5, result.getMembers().size());
for (Object member : result.getMembers())
{
assertTrue(member instanceof LinearDiscriminantWithBias);
}
}
}