/*
* File: PrincipalComponentsAnalysisFunctionTest.java
* Authors: Kevin R. Dixon
* Company: Sandia National Laboratories
* Project: Cognitive Foundry
*
* 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.pca;
import gov.sandia.cognition.math.matrix.VectorFactory;
import gov.sandia.cognition.learning.function.vector.MultivariateDiscriminant;
import gov.sandia.cognition.math.matrix.Matrix;
import gov.sandia.cognition.math.matrix.MatrixFactory;
import gov.sandia.cognition.math.matrix.Vector;
import java.util.Random;
import junit.framework.TestCase;
/**
*
* @author Kevin R. Dixon
*/
public class PrincipalComponentsAnalysisFunctionTest extends TestCase
{
/** The random number generator for the tests. */
private Random random = new Random(1);
public PrincipalComponentsAnalysisFunctionTest(String testName)
{
super(testName);
}
public PrincipalComponentsAnalysisFunction createInstance()
{
int N = random.nextInt(10) + 2;
int M = N-1;
double r = 1;
Vector mean = VectorFactory.getDefault().createUniformRandom( N, -r, r, random );
Matrix C = MatrixFactory.getDefault().createUniformRandom( M, N, -r, r, random );
return new PrincipalComponentsAnalysisFunction(
mean, new MultivariateDiscriminant( C ) );
}
/**
* Test of clone method, of class gov.sandia.cognition.learning.pca.PrincipalComponentsAnalysisFunction.
*/
public void testClone()
{
System.out.println("clone");
PrincipalComponentsAnalysisFunction f0 = new PrincipalComponentsAnalysisFunction();
assertNull( f0.getDimensionReducer() );
assertNull( f0.getMean() );
PrincipalComponentsAnalysisFunction instance = this.createInstance();
PrincipalComponentsAnalysisFunction clone = instance.clone();
assertNotSame( instance, clone );
assertNotSame( instance.getMean(), clone.getMean() );
assertEquals( instance.getMean(), clone.getMean() );
assertNotSame( instance.getDimensionReducer(), clone.getDimensionReducer() );
assertEquals( instance.getDimensionReducer().getDiscriminant(), clone.getDimensionReducer().getDiscriminant() );
}
/**
* Test of evaluate method, of class gov.sandia.cognition.learning.pca.PrincipalComponentsAnalysisFunction.
*/
public void testEvaluate()
{
System.out.println("evaluate");
for( int i = 0; i < 100; i++ )
{
PrincipalComponentsAnalysisFunction instance = this.createInstance();
Vector x = VectorFactory.getDefault().createUniformRandom( instance.getInputDimensionality(), -1, 1, random );
Vector y = instance.getDimensionReducer().evaluate( x.minus( instance.getMean() ) );
Vector yhat = instance.evaluate( x );
if( y.equals( yhat, 1e-5 ) == false )
{
assertEquals( y, yhat );
}
}
}
/**
* Test of getInputDimensionality method, of class gov.sandia.cognition.learning.pca.PrincipalComponentsAnalysisFunction.
*/
public void testGetInputDimensionality()
{
System.out.println("getInputDimensionality");
PrincipalComponentsAnalysisFunction instance = this.createInstance();
assertEquals( instance.getMean().getDimensionality(), instance.getInputDimensionality() );
}
/**
* Test of getOutputDimensionality method, of class gov.sandia.cognition.learning.pca.PrincipalComponentsAnalysisFunction.
*/
public void testGetOutputDimensionality()
{
System.out.println("getOutputDimensionality");
PrincipalComponentsAnalysisFunction instance = this.createInstance();
assertEquals( instance.getDimensionReducer().getDiscriminant().getNumRows(), instance.getOutputDimensionality() );
}
/**
* Test of getMean method, of class gov.sandia.cognition.learning.pca.PrincipalComponentsAnalysisFunction.
*/
public void testGetMean()
{
System.out.println("getMean");
PrincipalComponentsAnalysisFunction instance = this.createInstance();
Vector mean = instance.getMean();
assertNotNull( mean );
}
/**
* Test of setMean method, of class gov.sandia.cognition.learning.pca.PrincipalComponentsAnalysisFunction.
*/
public void testSetMean()
{
System.out.println("setMean");
PrincipalComponentsAnalysisFunction instance = this.createInstance();
Vector mean = instance.getMean();
assertNotNull( mean );
instance.setMean( null );
assertNull( instance.getMean() );
instance.setMean( mean );
assertSame( mean, instance.getMean() );
}
/**
* Test of getDimensionReducer method, of class gov.sandia.cognition.learning.pca.PrincipalComponentsAnalysisFunction.
*/
public void testGetDimensionReducer()
{
System.out.println("getDimensionReducer");
PrincipalComponentsAnalysisFunction instance = this.createInstance();
MultivariateDiscriminant m = instance.getDimensionReducer();
assertNotNull( m );
}
/**
* Test of setDimensionReducer method, of class gov.sandia.cognition.learning.pca.PrincipalComponentsAnalysisFunction.
*/
public void testSetDimensionReducer()
{
System.out.println("setDimensionReducer");
PrincipalComponentsAnalysisFunction instance = this.createInstance();
MultivariateDiscriminant m = instance.getDimensionReducer();
assertNotNull( m );
instance.setDimensionReducer( null );
assertNull( instance.getDimensionReducer() );
instance.setDimensionReducer( m );
assertSame( m, instance.getDimensionReducer() );
}
}