age.set_density_parameters(ExponentialParameters(0.1, {})) sun.set_density_parameters(BetaParameters(2, {}, 2, {})) ground.set_density_parameters(GaussParameters(2.0, {}, 1.5)) growth.set_density_parameters(GaussParameters(0.1, {age: 5.0, ground: 1.0, sun: 4.0}, 2.5)) height.set_density_parameters(BetaParameters(0.1, {growth: 1}, 0.5, {growth: 0.5})) diameter.set_density_parameters(ExponentialParameters(0.01, {growth: 0.2})) children.set_density_parameters(ExponentialParameters(0.1, {ground: 1.0, height: 1.0})) mcmc_ask = MCMC(bn, 1000) evidence = {age: EvEqual(2)} print "PosteriorMarginal:" pm = mcmc_ask.calculate_PosteriorMarginal([age, height], evidence, NDGauss) # pm=mcmc_ask.calculate_PosteriorMarginal([height],evidence,Gauss) print pm print "PriorMarginal:" pm = mcmc_ask.calculate_PriorMarginal([age], NDGauss) print pm # pm=mcmc_ask.calculate_PriorMarginal([height,diameter],Gauss) pm = mcmc_ask.calculate_PriorMarginal([height], NDGauss) print pm
#->lambda=2.0 age_parameters=ExponentialParameters(0.0,{}) age.set_density_parameters(age_parameters) #Semantics: plants start at 0.1 meters underground and grow each year by 1 meter. # variance is 0.3 height_parameters=GaussParameters(-0.1,{age:1},0.3) height.set_density_parameters(height_parameters) #Semantics: At small age: low alpha, high beta -> skew to the left: thin plants # At higher age: high alpha, low beta -> skew to the right: thick plants diameter_parameters=BetaParameters(-10.0,{age:4.0},10.0,{age:-4.0}) diameter.set_density_parameters(diameter_parameters) mcmc_ask=MCMC(bn,1000,convergence_test=ConvergenceTestSimpleCounting(500)) print "------PriorMarginal:------" pm=mcmc_ask.calculate_PriorMarginal([age],NDGauss) print pm print "Ground truth: mu=0.5 C=[0.25]" pm=mcmc_ask.calculate_PriorMarginal([height],NDGauss) print pm print "" print "------PosteriorMarginal:------" pm=mcmc_ask.calculate_PosteriorMarginal([age,height],{age:EvEqual(2)},NDGauss)
ground: 1.0, sun: 4.0 }, 2.5)) height.set_density_parameters( BetaParameters(0.1, {growth: 1}, 0.5, {growth: 0.5})) diameter.set_density_parameters(ExponentialParameters(0.01, {growth: 0.2})) children.set_density_parameters( ExponentialParameters(0.1, { ground: 1.0, height: 1.0 })) mcmc_ask = MCMC(bn, 1000) evidence = {age: EvEqual(2)} print "PosteriorMarginal:" pm = mcmc_ask.calculate_PosteriorMarginal([age, height], evidence, NDGauss) #pm=mcmc_ask.calculate_PosteriorMarginal([height],evidence,Gauss) print pm print "PriorMarginal:" pm = mcmc_ask.calculate_PriorMarginal([age], NDGauss) print pm #pm=mcmc_ask.calculate_PriorMarginal([height,diameter],Gauss) pm = mcmc_ask.calculate_PriorMarginal([height], NDGauss) print pm
alarm = DiscreteNode("Alarm", ["Ringing", "Silent", "Destroyed"]) bn.add_node(burglary) bn.add_node(alarm) bn.add_edge(burglary, alarm) #Parametrize the network burglary_cpt = numpy.array([0.2, 0.8]) 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]) #Get some inference object mcmc_ask = MCMC(bn, 5000, transition_model=GibbsTransitionModel()) #Do some Inferences evidence = {burglary: EvEq("Intruder")} print "-------ProbabilityOfEvidence:-------" poe = mcmc_ask.calculate_PoE(evidence) print "p(evidence=Intruder)=" + str(poe) print "Ground truth=0.2\n" print "-------PosteriorMarginal:-------" pm = mcmc_ask.calculate_PosteriorMarginal([alarm], evidence, ProbabilityTable) print "P(alarm|burglary=Intruder)=" + str(pm) print "Ground truth=[0.8, 0.15, 0.05]\n" print "-------PriorMarginal:-------"
print "Posterior Marginal (alarm->ringing , earthquake->calm):" print "AlarmFT: " + str(factorTree.calculate_marginal([alarm])) print "John_CallsFT: " + str(factorTree.calculate_marginal([john_calls])) print "Baum_CallsFT: " + str(factorTree.calculate_marginal([baum_calls])) print "BurglaryFT: " + str(factorTree.calculate_marginal([burglary])) print "EarthquakeFT: " + str(factorTree.calculate_marginal([earthquake])) mcmc_ask=MCMC(bn,1000) print "====MCMC====" print "Prior Marginal:" print "AlarmFT: " + str(mcmc_ask.calculate_PriorMarginal([alarm],ProbabilityTable)) print "John_CallsFT: " + str(mcmc_ask.calculate_PriorMarginal([john_calls],ProbabilityTable)) print "Baum_CallsFT: " + str(mcmc_ask.calculate_PriorMarginal([baum_calls],ProbabilityTable)) print "BurglaryFT: " + str(mcmc_ask.calculate_PriorMarginal([burglary],ProbabilityTable)) print "EarthquakeFT: " + str(mcmc_ask.calculate_PriorMarginal([earthquake],ProbabilityTable)) evidences = {alarm: EvEq("Ringing"),earthquake: EvEq("Calm")} print "PoE: " + str(mcmc_ask.calculate_PoE(evidences))
bn.add_node(burglary) bn.add_node(alarm) bn.add_edge(burglary,alarm) #Parametrize the network burglary_cpt=numpy.array([0.2,0.8]) 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]) #Get some inference object mcmc_ask=MCMC(bn,5000,transition_model=GibbsTransitionModel()) #Do some Inferences evidence={burglary:EvEq("Intruder")} print "-------ProbabilityOfEvidence:-------" poe=mcmc_ask.calculate_PoE(evidence) print "p(evidence=Intruder)="+str(poe) print "Ground truth=0.2\n" print "-------PosteriorMarginal:-------" pm=mcmc_ask.calculate_PosteriorMarginal([alarm],evidence,ProbabilityTable) print "P(alarm|burglary=Intruder)="+str(pm) print "Ground truth=[0.8, 0.15, 0.05]\n" print "-------PriorMarginal:-------"