Esempio n. 1
0
    def test_ep_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.50001, ('diff',): 0.49999})

        f.connect(theta)
        f.connect(X, parent=False)
        f.connect(D)

        # Add nodes to lbp.
        lbp = LBP(strategy='tree')
        lbp.add_nodes([
            f, X, D, theta
        ])

        for i in range(50):
            lbp.run()
            #print theta.alpha.pretty_print(precision=5)
            lbp.init_messages()
Esempio n. 2
0
    def test_ep_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.50001, ('diff', ): 0.49999})

        f.connect(theta)
        f.connect(X, parent=False)
        f.connect(D)

        # Add nodes to lbp.
        lbp = LBP(strategy='tree')
        lbp.add_nodes([f, X, D, theta])

        for i in range(50):
            lbp.run()
            #print theta.alpha.pretty_print(precision=5)
            lbp.init_messages()
        print theta.alpha.pretty_print(precision=5)
Esempio n. 3
0
    def test_ep(self):
        # Create nodes.
        hid1 = DiscreteVariableNode("hid1", ["save", "del"])
        obs1 = DiscreteVariableNode("obs1", ["osave", "odel"])
        fact_h1_o1 = DirichletFactorNode("fact_h1_o1")
        theta_h1_o1 = DirichletParameterNode('theta_h1_o1', Factor(
            ['hid1', 'obs1'],
            {
                "hid1": ["save", "del"],
                "obs1": ["osave", "odel"]
            },
            {
                ("save", "osave"): 1,
                ("save", "odel"): 1,
                ("del", "osave"): 1,
                ("del", "odel"): 1,
            }))

        hid2 = DiscreteVariableNode("hid2", ["save", "del"])
        obs2 = DiscreteVariableNode("obs2", ["osave", "odel"])
        fact_h2_o2 = DirichletFactorNode("fact_h2_o2")
        theta_h2_o2 = DirichletParameterNode('theta_h2_o2', Factor(
            ['hid2', 'obs2'],
            {
                "hid2": ["save", "del"],
                "obs2": ["osave", "odel"]
            },
            {
                ("save", "osave"): 1,
                ("save", "odel"): 1,
                ("del", "osave"): 1,
                ("del", "odel"): 1,
            }))

        fact_h1_h2 = DiscreteFactorNode("fact_h1_h2", Factor(
            ['hid1', 'hid2'],
            {
                "hid1": ["save", "del"],
                "hid2": ["save", "del"],
            },
            {
                ("save", "save"): 0.9,
                ("save", "del"): 0.1,
                ("del", "save"): 0,
                ("del", "del"): 1
            }))

        # Connect nodes.
        obs1.connect(fact_h1_o1, parent=False)
        fact_h1_o1.connect(hid1)
        fact_h1_o1.connect(theta_h1_o1)

        obs2.connect(fact_h2_o2, parent=False)
        fact_h2_o2.connect(hid2)
        fact_h2_o2.connect(theta_h2_o2)

        hid1.connect(fact_h1_h2)
        hid2.connect(fact_h1_h2)

        # Add nodes to lbp.
        lbp = LBP(strategy='tree')
        lbp.add_nodes([
            obs1, obs2,
            fact_h1_o1, fact_h2_o2,
            theta_h1_o1, theta_h2_o2,
            hid1, hid2,
            fact_h1_h2
        ])

        obs1.observed({('osave',): 1})
        obs2.observed({('osave',): 1})
        hid1.observed({('save',): 1})
        hid2.observed({('save',): 1})

        for i in range(100):
            lbp.run()
            #print theta_h1_o1.alpha.pretty_print(precision=5)
            lbp.init_messages()
Esempio n. 4
0
    def test_ep(self):
        # Create nodes.
        hid1 = DiscreteVariableNode("hid1", ["save", "del"])
        obs1 = DiscreteVariableNode("obs1", ["osave", "odel"])
        fact_h1_o1 = DirichletFactorNode("fact_h1_o1")
        theta_h1_o1 = DirichletParameterNode(
            'theta_h1_o1',
            Factor(['hid1', 'obs1'], {
                "hid1": ["save", "del"],
                "obs1": ["osave", "odel"]
            }, {
                ("save", "osave"): 1,
                ("save", "odel"): 1,
                ("del", "osave"): 1,
                ("del", "odel"): 1,
            }))

        hid2 = DiscreteVariableNode("hid2", ["save", "del"])
        obs2 = DiscreteVariableNode("obs2", ["osave", "odel"])
        fact_h2_o2 = DirichletFactorNode("fact_h2_o2")
        theta_h2_o2 = DirichletParameterNode(
            'theta_h2_o2',
            Factor(['hid2', 'obs2'], {
                "hid2": ["save", "del"],
                "obs2": ["osave", "odel"]
            }, {
                ("save", "osave"): 1,
                ("save", "odel"): 1,
                ("del", "osave"): 1,
                ("del", "odel"): 1,
            }))

        fact_h1_h2 = DiscreteFactorNode(
            "fact_h1_h2",
            Factor(['hid1', 'hid2'], {
                "hid1": ["save", "del"],
                "hid2": ["save", "del"],
            }, {
                ("save", "save"): 0.9,
                ("save", "del"): 0.1,
                ("del", "save"): 0,
                ("del", "del"): 1
            }))

        # Connect nodes.
        obs1.connect(fact_h1_o1, parent=False)
        fact_h1_o1.connect(hid1)
        fact_h1_o1.connect(theta_h1_o1)

        obs2.connect(fact_h2_o2, parent=False)
        fact_h2_o2.connect(hid2)
        fact_h2_o2.connect(theta_h2_o2)

        hid1.connect(fact_h1_h2)
        hid2.connect(fact_h1_h2)

        # Add nodes to lbp.
        lbp = LBP(strategy='tree')
        lbp.add_nodes([
            obs1, obs2, fact_h1_o1, fact_h2_o2, theta_h1_o1, theta_h2_o2, hid1,
            hid2, fact_h1_h2
        ])

        obs1.observed({('osave', ): 1})
        obs2.observed({('osave', ): 1})
        hid1.observed({('save', ): 1})
        hid2.observed({('save', ): 1})

        for i in range(100):
            lbp.run()
            print theta_h1_o1.alpha.pretty_print(precision=5)
            lbp.init_messages()