def test_easy_shape(self): n1 = DiscreteNode("Some Node", [True, False]) n2 = DiscreteNode("Second Node" , [True, False]) s = n1.get_cpd().multiplication(n2.get_cpd()) self.assertEqual(s.table.shape, (2,2)); s = n1.get_cpd().multiplication(n1.get_cpd()) self.assertEqual(s.table.shape,(2,))
def test_complicated_multi(self): n1 = DiscreteNode("Some Node", [True, False]) n2 = DiscreteNode("Second Node" , [True, False,"noIdea"]) cpt1 = numpy.array([2,3]) cpt2 = numpy.array([5,7,9]) n1.set_probability_table(cpt1,[n1]) n2.set_probability_table(cpt2,[n2]) c3 = n1.get_cpd().multiplication(n2.get_cpd()) c3 = n1.get_cpd().multiplication(c3) cptN = numpy.array([[20, 28, 36],[45, 63, 81]]) numpy.testing.assert_array_equal(c3.table,cptN)
def test_easy_values(self): n1 = DiscreteNode("Some Node", [True, False]) n2 = DiscreteNode("Second Node" , [True, False]) cpt1 = numpy.array([2,3]) cpt2 = numpy.array([5,7]) n1.set_probability_table(cpt1,[n1]) n2.set_probability_table(cpt2,[n2]) s = n1.get_cpd().multiplication(n2.get_cpd()) cptN = numpy.array([[10,14],[15,21]]) numpy.testing.assert_array_equal(s.table,cptN) self.assertEqual(s.variables[0],n1)
def test_easy_marginalize(self): n1 = DiscreteNode("Some Node", [True, False]) n2 = DiscreteNode("Second Node" , [True, False, "other"]) cpt1 = numpy.array([2,3]) cpt2 = numpy.array([5,7,3]) n1.set_probability_table(cpt1,[n1]) n2.set_probability_table(cpt2,[n2]) s = n1.get_cpd().multiplication(n2.get_cpd()) s =s.marginalization(n2) print s.table cptN = numpy.array([30,45]) numpy.testing.assert_array_equal(s.table,cptN) self.assertEqual(s.variables[0],n1)
burglary.set_probability_table(burglary_cpt, [burglary]) alarm_cpt=numpy.array([[0.8,0.15,0.05],[0.05,0.9,0.05]]) alarm.set_probability_table(alarm_cpt, [burglary,alarm]) #Construct a Markov Chain by sampling states from this Network transition_model = GibbsTransitionModel() mcs = MarkovChainSampler() initial_state={burglary:"Safe",alarm:"Silent"} chain = mcs.generateMarkovChain(bn, 5000, transition_model, initial_state) #for c in chain: # print c pt = ProbabilityTable() pt.add_variable(burglary) pt.add_variable(alarm) pt.to_jpt_by_states(chain) print "----joint-probability----" print pt print "----burglary----" print pt.marginalization(alarm) print "----alarm----" print pt.division(burglary.get_cpd()) bn.draw()