def test_logProductNormalizationTests(self): standardNormal = GaussianDistribution(0, 1) lpn = logProductNormalization(standardNormal, standardNormal) self.assertAlmostEqual(-1.2655121234846454, lpn, delta=self.__errorTolerance) m1s2 = GaussianDistribution(1, 2) m3s4 = GaussianDistribution(3, 4) lpn2 = logProductNormalization(m1s2, m3s4) self.assertAlmostEqual(-2.5168046699816684, lpn2, delta=self.__errorTolerance)
def logNormalization(self): marginal = self._variables[0].value message = self._messages[0].value messageFromVariable = marginal/message mean = messageFromVariable.mean std = messageFromVariable.standardDeviation z = cumulativeTo((self._epsilon - mean) / std) - cumulativeTo((-1.0 * self._epsilon - mean) / std) return -1.0 * logProductNormalization(messageFromVariable, message) + log(z)
def sendMessage(self, message, variable): marginal = variable.value messageValue = message.value logZ = logProductNormalization(marginal, messageValue) variable.value = marginal*messageValue return logZ
def logNormalization(self): marginal = self._variables[0].value message = self._messages[0].value messageFromVariable = marginal/message return -1.0*logProductNormalization(messageFromVariable, message) + log(cumulativeTo((messageFromVariable.mean - self._epsilon) / messageFromVariable.standardDeviation))