/* * File: GaussianContextRecognizerTest.java * Authors: Kevin R. Dixon * Company: Sandia National Laboratories * Project: Cognitive Foundry * * Copyright July 3, 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.function.vector; import gov.sandia.cognition.learning.algorithm.clustering.cluster.GaussianCluster; import gov.sandia.cognition.statistics.distribution.MixtureOfGaussians; import gov.sandia.cognition.statistics.distribution.MultivariateGaussian; import gov.sandia.cognition.math.matrix.VectorFactory; import gov.sandia.cognition.math.matrix.Matrix; import gov.sandia.cognition.math.matrix.MatrixFactory; import gov.sandia.cognition.math.matrix.Vector; import java.util.ArrayList; import java.util.Random; import junit.framework.TestCase; /** * * @author Kevin R. Dixon */ public class GaussianContextRecognizerTest extends TestCase { /** The random number generator for the tests. */ protected Random random = new Random(1); public GaussianContextRecognizerTest(String testName) { super(testName); } public GaussianContextRecognizer createInstance() { int M = 1; int K = 2; ArrayList<MultivariateGaussian.PDF> gaussians = new ArrayList<MultivariateGaussian.PDF>(K); double r = 1.0; double[] prior = new double[ K ]; for( int k = 0; k < K; k++ ) { prior[k] = random.nextDouble(); } // Vector prior = VectorFactory.getDefault().createUniformRandom(K, 0, 1.0, random); for (int k = 0; k < K; k++) { Matrix covSqrt = MatrixFactory.getDefault().createUniformRandom(M, M, -r, r, random); Vector mean = VectorFactory.getDefault().createUniformRandom(M, -r, r, random); Matrix covariance = covSqrt.transpose().times(covSqrt); gaussians.add(new MultivariateGaussian.PDF(mean, covariance)); } return new GaussianContextRecognizer( new MixtureOfGaussians.PDF(gaussians, prior)); } /** * Test of clone method, of class gov.sandia.cognition.learning.util.function.GaussianContextRecognizer. */ public void testClone() { System.out.println("clone"); GaussianContextRecognizer instance = this.createInstance(); GaussianContextRecognizer clone = instance.clone(); assertEquals(instance.getGaussianMixture().getDistributions(), clone.getGaussianMixture().getDistributions()); assertNotSame(instance.getGaussianMixture(), clone.getGaussianMixture()); } /** * Test of evaluate method, of class gov.sandia.cognition.learning.util.function.GaussianContextRecognizer. */ public void testEvaluate() { System.out.println("evaluate"); GaussianContextRecognizer instance = this.createInstance(); MixtureOfGaussians.PDF mog = instance.getGaussianMixture().clone(); int M = mog.getDimensionality(); double r = 1.0; for (int i = 0; i < 100; i++) { Vector input = VectorFactory.getDefault().createUniformRandom(M, -r, r, random); assertEquals( VectorFactory.getDefault().copyArray( mog.computeRandomVariableProbabilities(input)), instance.evaluate(input)); } } /** * Test of consumeClusters method, of class gov.sandia.cognition.learning.util.function.GaussianContextRecognizer. */ public void testConsumeClusters() { System.out.println("consumeClusters"); GaussianContextRecognizer instance = this.createInstance(); int M = instance.getGaussianMixture().getDimensionality(); int K = random.nextInt(10) + 2; double r = 1.0; ArrayList<GaussianCluster> clusters = new ArrayList<GaussianCluster>(K); for (int k = 0; k < K; k++) { int N = random.nextInt( 100 ) + 2 * M; ArrayList<Vector> members = new ArrayList<Vector>(N); for (int n = 0; n < N; n++) { members.add(VectorFactory.getDefault().createUniformRandom(M, -r, r, random)); } clusters.add(new GaussianCluster(members, MultivariateGaussian.MaximumLikelihoodEstimator.learn(members, 0.0))); } instance.consumeClusters(clusters); for (int k = 0; k < K; k++) { assertEquals(instance.getGaussianMixture().getDistributions().get(k), clusters.get(k).getGaussian()); } } /** * Test of getGaussianMixture method, of class gov.sandia.cognition.learning.util.function.GaussianContextRecognizer. */ public void testGetGaussianMixture() { System.out.println("getGaussianMixture"); GaussianContextRecognizer instance = this.createInstance(); MixtureOfGaussians.PDF mog = instance.getGaussianMixture(); assertNotNull(mog); } /** * Test of setGaussianMixture method, of class gov.sandia.cognition.learning.util.function.GaussianContextRecognizer. */ public void testSetGaussianMixture() { System.out.println("setGaussianMixture"); GaussianContextRecognizer instance = this.createInstance(); MixtureOfGaussians.PDF mog = instance.getGaussianMixture(); assertNotNull(mog); instance.setGaussianMixture(null); assertNull(instance.getGaussianMixture()); instance.setGaussianMixture(mog); assertSame(mog, instance.getGaussianMixture()); } public void testDimensionality() { System.out.println( "getDimensionality" ); GaussianContextRecognizer instance = this.createInstance(); int M = instance.getInputDimensionality(); double r = 2.0; Vector x = VectorFactory.getDefault().createUniformRandom(M, -r, r, random); Vector y = instance.evaluate(x); assertEquals( x.getDimensionality(), instance.getInputDimensionality() ); assertEquals( y.getDimensionality(), instance.getOutputDimensionality() ); } }