/* * File: MultivariateGaussianMeanBayesianEstimatorTest.java * Authors: Kevin R. Dixon * Company: Sandia National Laboratories * Project: Cognitive Foundry * * Copyright Nov 23, 2009, 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.statistics.bayesian.conjugate; import gov.sandia.cognition.math.matrix.Matrix; import gov.sandia.cognition.math.matrix.MatrixFactory; import gov.sandia.cognition.math.matrix.Vector; import gov.sandia.cognition.math.matrix.VectorFactory; import gov.sandia.cognition.statistics.distribution.MultivariateGaussian; import java.util.ArrayList; /** * Unit tests for MultivariateGaussianMeanBayesianEstimatorTest. * * @author krdixon */ public class MultivariateGaussianMeanBayesianEstimatorTest extends ConjugatePriorBayesianEstimatorTestHarness<Vector,Vector,MultivariateGaussian> { /** * Tests for class MultivariateGaussianMeanBayesianEstimatorTest. * @param testName Name of the test. */ public MultivariateGaussianMeanBayesianEstimatorTest( String testName) { super(testName); } /** * Tests the constructors of class MultivariateGaussianMeanBayesianEstimatorTest. */ public void testConstructors() { System.out.println( "Constructors" ); MultivariateGaussianMeanBayesianEstimator instance = new MultivariateGaussianMeanBayesianEstimator(); Matrix C = MatrixFactory.getDefault().createIdentity(DEFAULT_DIM,DEFAULT_DIM); instance = new MultivariateGaussianMeanBayesianEstimator( C ); assertEquals( C, instance.getKnownCovarianceInverse() ); MultivariateGaussian g = this.createConditionalDistribution(); instance = new MultivariateGaussianMeanBayesianEstimator( C, g ); assertEquals( C, instance.getKnownCovarianceInverse() ); assertSame( g, instance.getInitialBelief() ); } /** * Test of getKnownCovarianceInverse method, of class MultivariateGaussianMeanBayesianEstimator. */ public void testGetKnownCovarianceInverse() { System.out.println("getKnownCovarianceInverse"); MultivariateGaussianMeanBayesianEstimator instance = new MultivariateGaussianMeanBayesianEstimator(); assertNotNull( instance.getKnownCovarianceInverse() ); } /** * Test of setKnownCovarianceInverse method, of class MultivariateGaussianMeanBayesianEstimator. */ public void testSetKnownCovarianceInverse() { System.out.println("setKnownCovarianceInverse"); MultivariateGaussianMeanBayesianEstimator instance = new MultivariateGaussianMeanBayesianEstimator(); Matrix C = instance.getKnownCovarianceInverse(); assertNotNull( C ); // Definitely not symmetric now. Matrix D = MatrixFactory.getDefault().createUniformRandom(DEFAULT_DIM,DEFAULT_DIM, 1.0, 2.0, RANDOM ); D.setElement(0,1,0.5); Matrix C2 = D.transpose().times( D ); instance.setKnownCovarianceInverse(C2); if( !C2.equals(instance.getKnownCovarianceInverse(), TOLERANCE) ) { assertEquals( C2, instance.getKnownCovarianceInverse() ); } try { instance.setKnownCovarianceInverse(D); fail( "D is not symmetric" ); } catch (Exception e) { System.out.println( "Good: " + e ); } Matrix Z = MatrixFactory.getDefault().createMatrix(DEFAULT_DIM,DEFAULT_DIM); try { instance.setKnownCovarianceInverse(Z); fail( "Z is not invertible" ); } catch (Exception e) { System.out.println( "Good: " + e ); } } /** * Default dimensionality. */ public static final int DEFAULT_DIM = 3; @Override public MultivariateGaussianMeanBayesianEstimator createInstance() { return new MultivariateGaussianMeanBayesianEstimator( MatrixFactory.getDefault().createIdentity(DEFAULT_DIM,DEFAULT_DIM) ); } @Override public MultivariateGaussian createConditionalDistribution() { return new MultivariateGaussian( VectorFactory.getDefault().createUniformRandom(DEFAULT_DIM, -1.0, 1.0, RANDOM ), MatrixFactory.getDefault().createIdentity(DEFAULT_DIM,DEFAULT_DIM).scale(RANDOM.nextDouble()) ); } @Override public void testKnownValues() { System.out.println( "Known Values" ); MultivariateGaussianMeanBayesianEstimator instance = new MultivariateGaussianMeanBayesianEstimator( MatrixFactory.getDefault().createIdentity(1,1).scale(1.0/4.0), new MultivariateGaussian( VectorFactory.getDefault().copyValues(30.0), MatrixFactory.getDefault().createIdentity(1,1).scale(16.0) ) ); ArrayList<Vector> data = new ArrayList<Vector>( 12 ); for( int i = 0; i < 12; i++ ) { data.add( VectorFactory.getDefault().copyValues(32.0) ); } MultivariateGaussian result = instance.learn(data); assertEquals( 0.3265306, result.getCovariance().getElement(0,0), TOLERANCE ); assertEquals( 31.959184, result.getMean().getElement(0), TOLERANCE ); } }