def testDivision(self): product = Gaussian(0.2, 3.0 / sqrt(10)) standard_normal = Gaussian(0.0, 1.0) product_divided_by_standard_normal = product / standard_normal self.assertAlmostEqual( 2.0, product_divided_by_standard_normal.mean, None, "testDivision mean expected %.15f, got %.15f" % (2.0, product_divided_by_standard_normal.mean), GaussianDistributionTest.ERROR_TOLERANCE) self.assertAlmostEqual( 3.0, product_divided_by_standard_normal.stdev, None, "testDivision stdev expected %.15f, got %.15f" % (3.0, product_divided_by_standard_normal.stdev), GaussianDistributionTest.ERROR_TOLERANCE) product2 = Gaussian((4.0 * 7.0**2 + 6.0 * 5.0**2) / (5.0**2 + 7.0**2), sqrt((5.0**2 * 7.0**2) / (5.0**2 + 7.0**2))) m4s5 = Gaussian(4.0, 5.0) product2divided_by_m4s5 = product2 / m4s5 self.assertAlmostEqual( 6.0, product2divided_by_m4s5.mean, None, "testDivision mean2 expected %.15f, got %.15f" % (6.0, product2divided_by_m4s5.mean), GaussianDistributionTest.ERROR_TOLERANCE) self.assertAlmostEqual( 7.0, product2divided_by_m4s5.stdev, None, "testDivision stdev2 expected %.15f, got %.15f" % (7.0, product2divided_by_m4s5.stdev), GaussianDistributionTest.ERROR_TOLERANCE)
def testMultiplication(self): standard_normal = Gaussian(0, 1) shifted_gaussian = Gaussian(2, 3) product = standard_normal * shifted_gaussian self.assertAlmostEqual( 0.2, product.mean, None, "testMultiplication mean expected %.15f, got %.15f" % (0.2, product.mean), GaussianDistributionTest.ERROR_TOLERANCE) self.assertAlmostEqual( 3.0 / sqrt(10), product.stdev, None, "testMultiplication stdev expected %.15f, got %.15f" % (0.2, product.mean), GaussianDistributionTest.ERROR_TOLERANCE) m4s5 = Gaussian(4, 5) m6s7 = Gaussian(6, 7) product2 = m4s5 * m6s7 expectedMean = (4.0 * 7.0**2 + 6.0 * 5.0**2) / (5.0**2 + 7.0**2) self.assertAlmostEqual( expectedMean, product2.mean, None, "testMultiplication mean2 expected %.15f, got %.15f" % (expectedMean, product2.mean), GaussianDistributionTest.ERROR_TOLERANCE) expectedSigma = sqrt((5.0**2 * 7.0**2) / (5.0**2 + 7.0**2)) self.assertAlmostEqual( expectedSigma, product2.stdev, None, "testMultiplication stdev2 expected %.15f, got %.15f" % (expectedSigma, product2.stdev), GaussianDistributionTest.ERROR_TOLERANCE)
def testLogRatioNormalization(self): m1s2 = Gaussian(1.0, 2.0) m3s4 = Gaussian(3.0, 4.0) lrn = Gaussian.log_ratio_normalization(m1s2, m3s4) answer = 2.6157405972171204 self.assertAlmostEqual( answer, lrn, None, "testLogRatioNormalization lrn expected %.15f, got %.15f" % (answer, lrn), GaussianDistributionTest.ERROR_TOLERANCE)
def partial_update(self, prior, full_posterior, update_percentage): prior_gaussian = Gaussian(prior.mean, prior.stdev) posterior_gaussian = Gaussian(full_posterior.mean, full_posterior.stdev) partial_precision_diff = update_percentage * (posterior_gaussian.precision - prior_gaussian.precision) partial_precision_mean_diff = update_percentage * (posterior_gaussian.precision_mean - prior_gaussian.precision_mean) partial_posterior_gaussian = Gaussian.from_precision_mean( prior_gaussian.precision_mean + partial_precision_mean_diff, prior_gaussian.precision + partial_precision_diff) return Rating(partial_posterior_gaussian.mean, partial_posterior_gaussian.stdev)
def testSubtraction(self): standard_normal = Gaussian(0.0, 1.0) abs_diff = standard_normal - standard_normal self.assertAlmostEqual( 0.0, abs_diff, None, "testAbsoluteDifference abs_diff expected %.15f, got %.15f" % (0.0, abs_diff), GaussianDistributionTest.ERROR_TOLERANCE) m1s2 = Gaussian(1.0, 2.0) m3s4 = Gaussian(3.0, 4.0) abs_diff2 = m1s2 - m3s4 answer = 0.4330127018922193 self.assertAlmostEqual( 0.0, abs_diff, None, "testAbsoluteDifference abs_diff2 expected %.15f, got %.15f" % (answer, abs_diff2), GaussianDistributionTest.ERROR_TOLERANCE)
def __init__(self, mean, variance, variable): GaussianFactor.__init__(self, "Prior value going to %s" % variable) self.new_message = Gaussian(mean, sqrt(variance)) new_message = Message(Gaussian.from_precision_mean(0, 0), "message from %s to %s" % (self, variable)) self.create_variable_to_message_binding_with_message( variable, new_message)
def testLogProductNormalization(self): standard_normal = Gaussian(0, 1) lpn = Gaussian.log_product_normalization(standard_normal, standard_normal) answer = -1.2655121234846454 self.assertAlmostEqual( answer, lpn, None, "testLogProductNormalization lpn expected %.15f, got %.15f" % (answer, lpn), GaussianDistributionTest.ERROR_TOLERANCE) m1s2 = Gaussian(1.0, 2.0) m3s4 = Gaussian(3.0, 4.0) lpn2 = Gaussian.log_product_normalization(m1s2, m3s4) answer = -2.5168046699816684 self.assertAlmostEqual( answer, lpn2, None, "testLogProductNormalization lpn2 expected %.15f, got %.15f" % (answer, lpn2), GaussianDistributionTest.ERROR_TOLERANCE)