/** {@inheritDoc} */ public double density(double x) { return FastMath.exp(logDensity(x)); }
/** {@inheritDoc} */ public double density(double x) { return Math.exp(logDensity(x)); }
/** {@inheritDoc} */ public double density(double x) { return FastMath.exp(logDensity(x)); }
@Test public void matchesKnownLogDensityOfVector() { NormalDistribution distribution = new NormalDistribution(0.0, 1.0); double expectedLogDensity = distribution.logDensity(0.25) + distribution.logDensity(0.75) + 2 * Math.log(2); HalfGaussianVertex tensorGaussianVertex = new HalfGaussianVertex(1); ProbabilisticDoubleTensorContract.matchesKnownLogDensityOfVector(tensorGaussianVertex, new double[]{0.25, 0.75}, expectedLogDensity); }
@Test public void logProbMatchesKnownLogDensityOfVector() { NormalDistribution distribution = new NormalDistribution(0.0, 1.0); double expectedLogDensity = distribution.logDensity(0.25) + distribution.logDensity(-0.75); GaussianVertex tensorGaussianVertex = new GaussianVertex(0, 1); ProbabilisticDoubleTensorContract.matchesKnownLogDensityOfVector(tensorGaussianVertex, new double[]{0.25, -0.75}, expectedLogDensity); }
@Test public void matchesKnownLogDensityOfScalar() { NormalDistribution distribution = new NormalDistribution(0.0, 1.0); HalfGaussianVertex tensorGaussianVertex = new HalfGaussianVertex(1); double expectedDensity = distribution.logDensity(0.5) + Math.log(2); ProbabilisticDoubleTensorContract.matchesKnownLogDensityOfScalar(tensorGaussianVertex, 0.5, expectedDensity); }
@Test public void bivariateGaussianLogProbMatchesLogDensityOfVector() { DoubleVertex mu = ConstantVertex.of(new double[]{2, 3}, 2, 1); MultivariateGaussianVertex mvg = new MultivariateGaussianVertex(mu, 1); double expectedDensity1 = new NormalDistribution(2, 1).logDensity(8); double expectedDensity2 = new NormalDistribution(3, 1).logDensity(10); double expectedDensity = expectedDensity1 + expectedDensity2; double density = mvg.logPdf(DoubleTensor.create(new double[]{8, 10}, 2, 1)); assertEquals(expectedDensity, density, 0.0001); }
@Test public void logProbMatchesKnownLogDensityOfScalar() { NormalDistribution distribution = new NormalDistribution(0.0, 1.0); GaussianVertex tensorGaussianVertex = new GaussianVertex(0, 1); double expectedDensity = distribution.logDensity(0.5); ProbabilisticDoubleTensorContract.matchesKnownLogDensityOfScalar(tensorGaussianVertex, 0.5, expectedDensity); }
@Test public void logProbMatchesLogDensityOfScalar() { MultivariateGaussianVertex mvg = new MultivariateGaussianVertex(5, 1); double expectedDensity = new NormalDistribution(5.0, 1).logDensity(0.5); double density = mvg.logPdf(DoubleTensor.scalar(0.5)); assertEquals(expectedDensity, density, 1e-2); }
@Test public void logProbGraphMatchesKnownLogDensityOfVector() { DoubleVertex mu = ConstantVertex.of(0., 0.); DoubleVertex sigma = ConstantVertex.of(1., 1.); GaussianVertex vertex = new GaussianVertex(mu, sigma); LogProbGraph logProbGraph = vertex.logProbGraph(); LogProbGraphValueFeeder.feedValue(logProbGraph, mu, mu.getValue()); LogProbGraphValueFeeder.feedValue(logProbGraph, sigma, sigma.getValue()); LogProbGraphValueFeeder.feedValue(logProbGraph, vertex, DoubleTensor.create(0.25, -0.75)); NormalDistribution distribution = new NormalDistribution(0., 1.); double expectedLogDensity = distribution.logDensity(0.25) + distribution.logDensity(-0.75); LogProbGraphContract.matchesKnownLogDensity(logProbGraph, expectedLogDensity); }
@Test public void bivariateGaussianLogProbGraphMatchesLogDensityOfVector() { DoubleVertex mu = ConstantVertex.of(new double[]{2, 3}, 2, 1); MultivariateGaussianVertex mvg = new MultivariateGaussianVertex(mu, 1.); DoubleVertex covariance = mvg.getCovariance(); LogProbGraph logProbGraph = mvg.logProbGraph(); LogProbGraphValueFeeder.feedValue(logProbGraph, mu, mu.getValue()); LogProbGraphValueFeeder.feedValue(logProbGraph, covariance, covariance.getValue()); LogProbGraphValueFeeder.feedValue(logProbGraph, mvg, DoubleTensor.create(new double[] {8., 10.}, 2, 1)); double expectedDensity1 = new NormalDistribution(2, 1).logDensity(8); double expectedDensity2 = new NormalDistribution(3, 1).logDensity(10); double expectedDensity = expectedDensity1 + expectedDensity2; LogProbGraphContract.matchesKnownLogDensity(logProbGraph, expectedDensity); }
@Test public void logProbGraphMatchesLogDensityOfScalar() { MultivariateGaussianVertex mvg = new MultivariateGaussianVertex(5., 1.); DoubleVertex mu = mvg.getMu(); DoubleVertex covariance = mvg.getCovariance(); LogProbGraph logProbGraph = mvg.logProbGraph(); LogProbGraphValueFeeder.feedValue(logProbGraph, mu, mu.getValue()); LogProbGraphValueFeeder.feedValue(logProbGraph, covariance, covariance.getValue()); LogProbGraphValueFeeder.feedValue(logProbGraph, mvg, DoubleTensor.scalar(0.5)); double expectedDensity = new NormalDistribution(5.0, 1).logDensity(0.5); LogProbGraphContract.matchesKnownLogDensity(logProbGraph, expectedDensity); }
@Test public void logProbGraphMatchesKnownLogDensityOfScalar() { DoubleVertex mu = ConstantVertex.of(0.); DoubleVertex sigma = ConstantVertex.of(1.); GaussianVertex vertex = new GaussianVertex(mu, sigma); LogProbGraph logProbGraph = vertex.logProbGraph(); LogProbGraphValueFeeder.feedValue(logProbGraph, mu, mu.getValue()); LogProbGraphValueFeeder.feedValue(logProbGraph, sigma, sigma.getValue()); LogProbGraphValueFeeder.feedValue(logProbGraph, vertex, DoubleTensor.scalar(0.5)); NormalDistribution distribution = new NormalDistribution(0., 1.); double expectedLogDensity = distribution.logDensity(0.5); LogProbGraphContract.matchesKnownLogDensity(logProbGraph, expectedLogDensity); }