From afc13a69c0ef4dc569bc7960ac2f1934f657b11b Mon Sep 17 00:00:00 2001
From: Manuel Baum <mbaum@techfak.uni-bielefeld.de>
Date: Thu, 11 Jul 2013 19:26:05 +0200
Subject: [PATCH] Added MAP to examples/MCMC_Continuous.py

---
 examples/MCMC_Continuous.py           | 10 ++++++----
 examples/MCMC_Continuous_Plant.py     | 16 ++++------------
 primo/reasoning/density/Gauss.py      |  3 +++
 primo/reasoning/density/LinearBeta.py | 25 ++-----------------------
 4 files changed, 15 insertions(+), 39 deletions(-)

diff --git a/examples/MCMC_Continuous.py b/examples/MCMC_Continuous.py
index 42da8a7..ca8e797 100644
--- a/examples/MCMC_Continuous.py
+++ b/examples/MCMC_Continuous.py
@@ -43,7 +43,7 @@ diameter_parameters=LinearBetaParameters(-10.0,{age:4.0},10.0,{age:-4.0})
 diameter.set_density_parameters(diameter_parameters)
 
 
-mcmc_ask=MCMC(bn,10000,convergence_test=ConvergenceTestSimpleCounting(5000))
+mcmc_ask=MCMC(bn,1000,convergence_test=ConvergenceTestSimpleCounting(500))
 
 
 print "------PriorMarginal:------"
@@ -52,7 +52,6 @@ print "------PriorMarginal:------"
 pm=mcmc_ask.calculate_PriorMarginal([age],Gauss)
 print pm
 print "Ground truth: mu=0.5 C=[0.25]"
-#pm=mcmc_ask.calculate_PriorMarginal([height,diameter],Gauss)
 pm=mcmc_ask.calculate_PriorMarginal([height],Gauss)
 print pm
 print ""
@@ -60,14 +59,12 @@ print ""
 
 print "------PosteriorMarginal:------"
 pm=mcmc_ask.calculate_PosteriorMarginal([age,height],{age:EvEqual(2)},Gauss)
-#pm=mcmc_ask.calculate_PosteriorMarginal([height],evidence,Gauss)
 print "P(age,height|age=2):"
 print pm
 print "Ground truth: age=2, height=mu:1.9,C=0.3"
 print ""
 
 pm=mcmc_ask.calculate_PosteriorMarginal([age,height],{age:EvLower(0.1)},Gauss)
-#pm=mcmc_ask.calculate_PosteriorMarginal([height],evidence,Gauss)
 print "P(age,height|age<0.1):"
 print pm
 print "Ground truth: age=0:0.1, height=mu:-0.1:0.0,C=0.3"
@@ -78,6 +75,11 @@ poe=mcmc_ask.calculate_PoE({age:EvLower(0.347)})
 print "Probabilty that age is lower than it's median:"
 print "p(age<0.347)="+str(poe)
 print "Ground truth=0.5"
+print ""
+
+print "------MAP------"
+map_hypothesis=mcmc_ask.calculate_MAP([height,diameter],{},Gauss)
+print map_hypothesis
 
 
 
diff --git a/examples/MCMC_Continuous_Plant.py b/examples/MCMC_Continuous_Plant.py
index 1cc618c..bdb0887 100644
--- a/examples/MCMC_Continuous_Plant.py
+++ b/examples/MCMC_Continuous_Plant.py
@@ -7,7 +7,7 @@ from primo.reasoning.density import Gauss
 from primo.reasoning import MCMC
 
 from primo.reasoning import EvidenceEqual as EvEqual
-from primo.reasoning import EvidenceIntervall as EvInterval
+from primo.reasoning import EvidenceInterval as EvInterval
 
 import numpy
 
@@ -47,21 +47,17 @@ bn.add_edge(height,children)
 bn.add_edge(ground,children)
 
 #parameterization
-age_parameters=LinearExponentialParameters(0.1,{})
-age.set_density_parameters(age_parameters)
+age.set_density_parameters(LinearExponentialParameters(0.1,{}))
 
 sun.set_density_parameters(LinearBetaParameters(2,{},2,{}))
 
 ground.set_density_parameters(LinearGaussParameters(2.0,{},1.5))
 
-#age,ground,sun
 growth.set_density_parameters(LinearGaussParameters(0.1,{age:5.0,ground:1.0,sun:4.0},2.5))
 
-height_parameters=LinearBetaParameters(0.1,{growth:1},0.5,{growth:0.5})
-height.set_density_parameters(height_parameters)
+height.set_density_parameters(LinearBetaParameters(0.1,{growth:1},0.5,{growth:0.5}))
 
-diameter_parameters=LinearExponentialParameters(0.01,{growth:0.2})
-diameter.set_density_parameters(diameter_parameters)
+diameter.set_density_parameters(LinearExponentialParameters(0.01,{growth:0.2}))
 
 children.set_density_parameters(LinearExponentialParameters(0.1,{ground:1.0,height:1.0}))
 
@@ -71,10 +67,6 @@ mcmc_ask=MCMC(bn,1000)
 evidence={age:EvEqual(2)}
 
 
-#print "ProbabilityOfEvidence: " 
-#poe=mcmc_ask.calculate_PoE(evidence)
-#print poe
-
 print "PosteriorMarginal:"
 pm=mcmc_ask.calculate_PosteriorMarginal([age,height],evidence,Gauss)
 #pm=mcmc_ask.calculate_PosteriorMarginal([height],evidence,Gauss)
diff --git a/primo/reasoning/density/Gauss.py b/primo/reasoning/density/Gauss.py
index 3bb5587..7f6c26d 100644
--- a/primo/reasoning/density/Gauss.py
+++ b/primo/reasoning/density/Gauss.py
@@ -60,6 +60,9 @@ class Gauss(Density):
         self.C=numpy.cov(X.transpose())
         return self
         
+    def get_most_probable_instantiation(self):
+        return self.mu
+        
     def __str__(self):
         ret= "Gauss(\nmu="+str(self.mu)+"\nC="+str(self.C)+")"
         return ret
diff --git a/primo/reasoning/density/LinearBeta.py b/primo/reasoning/density/LinearBeta.py
index 0ba8bec..7535e8d 100644
--- a/primo/reasoning/density/LinearBeta.py
+++ b/primo/reasoning/density/LinearBeta.py
@@ -40,22 +40,10 @@ class LinearBeta(Density):
         
         
     def get_probability(self,value, node_value_pairs):
-        #print "Probability to compute for value:"+str(value)
-        #Compute the offset for the density and displace the value accordingly
-        #p = self.p0
-        #q = self.q0
-
-        #for node,node_value in node_value_pairs:
-        #    p = p + self.p[node]*node_value
-        #    q = q + self.q[node]*node_value
-        #p=1.0/(1.0+math.exp(-p))
-        #q=1.0/(1.0+math.exp(-q))
         p=self._compute_p_given_parents(dict(node_value_pairs))
         q=self._compute_q_given_parents(dict(node_value_pairs))
-        #print node_value_pairs
-        #print "beta "+str(p)+" "+str(q)
         probability = beta(p, q).pdf(value)
-        #print "/beta"
+
         return probability
         
     def _compute_p_given_parents(self, state):
@@ -76,16 +64,7 @@ class LinearBeta(Density):
     def sample_global(self, state, lower_limit, upper_limit):
         p=self._compute_p_given_parents(state)
         q=self._compute_q_given_parents(state)
-        #value=random.betavariate(p,q)
-        #print "Sampled:"+str(value)
-        #return value
-        
-        
-        
-        
-        
-        
-        #_lambda=self._compute_lambda_given_parents(state)
+
         distribution=beta(p,q)
         
         lower_cdf=distribution.cdf(lower_limit)
-- 
GitLab