def test_parameter_simple(self): alpha = DirichletParameterNode( 'theta', Factor(['X0', 'X1'], { 'X0': ['x0_0', 'x0_1'], 'X1': ['x1_0'], }, { ('x0_0', 'x1_0'): 3, ('x0_1', 'x1_0'): 1, })) factor = DirichletFactorNode('factor') x0 = DiscreteVariableNode('X0', ['x0_0', 'x0_1']) x1 = DiscreteVariableNode('X1', ['x1_0']) x1.observed({('x1_0', ): 1}) factor.connect(alpha) factor.connect(x0, parent=False) factor.connect(x1, parent=True) x0.message_to(factor) x1.message_to(factor) factor.update() self.assertAlmostEqual(factor.belief[('x0_0', 'x1_0')], 0.5) factor.message_to(x0) factor.message_to(x1) x0.update() self.assertAlmostEqual(x0.belief[('x0_0', )], 3.0 / 4) factor.message_to(alpha)
def test_dir_tight(self): theta = DirichletParameterNode( 'theta', Factor(['X', 'ZDummy'], { 'X': ['same', 'diff'], 'ZDummy': ['dummy'] }, { ('same', 'dummy'): 1, ('diff', 'dummy'): 1, }, logarithmetic=False)) X = DiscreteVariableNode('X', ['same', 'diff'], logarithmetic=False) D = DiscreteVariableNode('ZDummy', ['dummy'], logarithmetic=False) f = DirichletFactorNode('f') X.observed({('same', ): 0.8, ('diff', ): 0.2}) f.connect(theta) f.connect(X, parent=False) f.connect(D) X.message_to(f) D.message_to(f) f.update() f.message_to(theta) theta.message_to(f) X.observed({('same', ): 0.5, ('diff', ): 0.7}) X.message_to(f) f.update() f.message_to(theta)
def test_dir_tight(self): theta = DirichletParameterNode('theta', Factor( ['X', 'ZDummy'], { 'X': ['same', 'diff'], 'ZDummy': ['dummy'] }, { ('same', 'dummy'): 1, ('diff', 'dummy'): 1, }, logarithmetic=False )) X = DiscreteVariableNode('X', ['same', 'diff'], logarithmetic=False) D = DiscreteVariableNode('ZDummy', ['dummy'], logarithmetic=False) f = DirichletFactorNode('f') X.observed({('same',): 0.8, ('diff',): 0.2}) f.connect(theta) f.connect(X, parent=False) f.connect(D) X.message_to(f) D.message_to(f) f.update() f.message_to(theta) theta.message_to(f) X.observed({('same',): 0.5, ('diff',): 0.7}) X.message_to(f) f.update() f.message_to(theta)
def test_two_factors_one_theta2(self): alpha = DirichletParameterNode( 'theta', Factor(['X0', 'X1'], { 'X0': ['x0_0', 'x0_1'], 'X1': ['x1_0', 'x1_1', 'x1_2'], }, { ('x0_0', 'x1_0'): 1, ('x0_0', 'x1_1'): 8, ('x0_0', 'x1_2'): 1, ('x0_1', 'x1_0'): 1, ('x0_1', 'x1_1'): 2, ('x0_1', 'x1_2'): 1, })) f1 = DirichletFactorNode('f1', aliases={'X0': 'X0_a', 'X1': 'X1_a'}) x0 = DiscreteVariableNode('X0_a', ['x0_0', 'x0_1']) x1 = DiscreteVariableNode('X1_a', ['x1_0', 'x1_1', 'x1_2']) f2 = DirichletFactorNode('f2', aliases={'X0': 'X0_b', 'X1': 'X1_b'}) x2 = DiscreteVariableNode('X0_b', ['x0_0', 'x0_1']) x3 = DiscreteVariableNode('X1_b', ['x1_0', 'x1_1', 'x1_2']) f1.connect(x0, parent=False) f1.connect(x1) f2.connect(x2, parent=False) f2.connect(x3) f1.connect(alpha) f2.connect(alpha) alpha.aliases = { 'X0_a': 'X0', 'X0_b': 'X0', 'X1_a': 'X1', 'X1_b': 'X1' } x0.observed({('x0_0', ): 1}) x1.observed({('x1_0', ): 1}) x2.observed({('x0_1', ): 1}) x3.observed({('x1_0', ): 1}) x0.message_to(f1) x1.message_to(f1) x2.message_to(f2) x3.message_to(f2) f1.update() f2.update() f1.message_to(alpha) f2.message_to(alpha) self.assertAlmostEqual(alpha.alpha[('x0_0', 'x1_0')], 2, places=5) self.assertAlmostEqual(alpha.alpha[('x0_1', 'x1_0')], 2, places=5)
def test_two_factors_one_theta2(self): alpha = DirichletParameterNode('theta', Factor( ['X0', 'X1'], { 'X0': ['x0_0', 'x0_1'], 'X1': ['x1_0', 'x1_1', 'x1_2'], }, { ('x0_0', 'x1_0'): 1, ('x0_0', 'x1_1'): 8, ('x0_0', 'x1_2'): 1, ('x0_1', 'x1_0'): 1, ('x0_1', 'x1_1'): 2, ('x0_1', 'x1_2'): 1, } )) f1 = DirichletFactorNode('f1', aliases={'X0': 'X0_a', 'X1': 'X1_a'}) x0 = DiscreteVariableNode('X0_a', ['x0_0', 'x0_1']) x1 = DiscreteVariableNode('X1_a', ['x1_0', 'x1_1', 'x1_2']) f2 = DirichletFactorNode('f2', aliases={'X0': 'X0_b', 'X1': 'X1_b'}) x2 = DiscreteVariableNode('X0_b', ['x0_0', 'x0_1']) x3 = DiscreteVariableNode('X1_b', ['x1_0', 'x1_1', 'x1_2']) f1.connect(x0, parent=False) f1.connect(x1) f2.connect(x2, parent=False) f2.connect(x3) f1.connect(alpha) f2.connect(alpha) alpha.aliases = {'X0_a': 'X0', 'X0_b': 'X0', 'X1_a': 'X1', 'X1_b': 'X1'} x0.observed({('x0_0',): 1}) x1.observed({('x1_0',): 1}) x2.observed({('x0_1',): 1}) x3.observed({('x1_0',): 1}) x0.message_to(f1) x1.message_to(f1) x2.message_to(f2) x3.message_to(f2) f1.update() f2.update() f1.message_to(alpha) f2.message_to(alpha) print alpha.alpha self.assertAlmostEqual(alpha.alpha[('x0_0', 'x1_0')], 2, places=5) self.assertAlmostEqual(alpha.alpha[('x0_1', 'x1_0')], 2, places=5)
def test_parameter(self): alpha = DirichletParameterNode('theta', Factor( ['X0', 'X1'], { 'X0': ['x0_0', 'x0_1'], 'X1': ['x1_0', 'x1_1', 'x1_2'], }, { ('x0_0', 'x1_0'): 1, ('x0_0', 'x1_1'): 8, ('x0_0', 'x1_2'): 1, ('x0_1', 'x1_0'): 1, ('x0_1', 'x1_1'): 2, ('x0_1', 'x1_2'): 1, } )) factor = DirichletFactorNode('factor') x0 = DiscreteVariableNode('X0', ['x0_0', 'x0_1']) x1 = DiscreteVariableNode('X1', ['x1_0', 'x1_1', 'x1_2']) x0.observed({('x0_0',): 1}) x1.observed({('x1_0',): 0.7, ('x1_1',): 0.2, ('x1_2',): 0.1}) factor.connect(alpha) factor.connect(x0, parent=False) factor.connect(x1, parent=True) x0.message_to(factor) x1.message_to(factor) factor.update() factor.message_to(x0) factor.message_to(x1) x0.update() factor.message_to(alpha) print alpha.alpha alpha.message_to(factor) factor.update() factor.message_to(alpha) print alpha.alpha
def test_parameter_simple(self): alpha = DirichletParameterNode('theta', Factor( ['X0', 'X1'], { 'X0': ['x0_0', 'x0_1'], 'X1': ['x1_0'], }, { ('x0_0', 'x1_0'): 3, ('x0_1', 'x1_0'): 1, } )) factor = DirichletFactorNode('factor') x0 = DiscreteVariableNode('X0', ['x0_0', 'x0_1']) x1 = DiscreteVariableNode('X1', ['x1_0']) x1.observed({('x1_0',): 1}) factor.connect(alpha) factor.connect(x0, parent=False) factor.connect(x1, parent=True) x0.message_to(factor) x1.message_to(factor) factor.update() self.assertAlmostEqual(factor.belief[('x0_0', 'x1_0')], 0.5) factor.message_to(x0) factor.message_to(x1) x0.update() self.assertAlmostEqual(x0.belief[('x0_0',)], 3.0/4) factor.message_to(alpha) print alpha.alpha