Advertisement
elrodc

Untitled

Feb 25th, 2015
276
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.27 KB | None | 0 0
  1. from numpy import array, exp, ones, mean
  2. from random import uniform, gauss
  3.  
  4. class Gaussian_Likelihood_Updater(object):
  5.     def __init__(self, standard_deviation, number_hypothesis=200):
  6.         self.h, self.probabilies, self.standard_deviation, self.n = array(range(number_hypothesis+1))/float(number_hypothesis*0.5)-1.0, ones(number_hypothesis+1), standard_deviation, number_hypothesis + 1
  7.         self.Normalize()
  8.     def Normalize(self):
  9.         self.probabilies /= self.probabilies.sum()
  10.     def Likelihood(self, hypothesis, evidence):
  11.         return exp(-1.0*(hypothesis - evidence)**2/(2.0*self.standard_deviation**2))
  12.     def Update(self, evidence):
  13.         for i, hypothesis, probability in zip(xrange(self.n), self.h, self.probabilies):
  14.             self.probabilies[i] *= self.Likelihood(hypothesis, evidence)
  15.         self.Normalize()
  16.     def Mean_Likelihood(self):
  17.         mean_like = 0.0
  18.         for hypothesis, probability in zip(self.h, self.probabilies):
  19.             mean_like += hypothesis * probability
  20.         return mean_like
  21.  
  22. def main():
  23.     standard_deviation = 0.5
  24.     iterations = 100000
  25.     number_of_updates = 5
  26.     mean_likelihood_lists = []
  27.     for i in xrange(number_of_updates+1):
  28.         mean_likelihood_lists.append([])
  29.     for i in xrange(iterations):
  30.         mean_this_iteration = uniform(-1,1)
  31.         our_hypothesis = Gaussian_Likelihood_Updater(standard_deviation)
  32.         for i in xrange(number_of_updates):
  33.             mean_likelihood_lists[i].append(our_hypothesis.Mean_Likelihood())
  34.             our_hypothesis.Update(gauss(mean_this_iteration,standard_deviation))
  35.         mean_likelihood_lists[-1].append(our_hypothesis.Mean_Likelihood())
  36.     for i, mean_likelihood_list in enumerate(mean_likelihood_lists):
  37.         print "Mean value of estimates following " + str(i) + " updates:", mean(mean_likelihood_list)
  38.         print "Mean absolute value of estimates following " + str(i) + " updates:", mean([abs(val) for val in mean_likelihood_list])
  39.     print "\n", "-"*60, "\n"
  40.     for i in xrange(number_of_updates):
  41.         shift_list = [posterior_mean_likelihood-prior_mean_likelihood for posterior_mean_likelihood, prior_mean_likelihood in zip(mean_likelihood_lists[i+1], mean_likelihood_lists[i])]
  42.         print "Mean Value of Shift for update " + str(i+1) + ":", mean(shift_list)
  43.         print "Mean Absolute Value of Shift for update " + str(i+1) + ":", mean([abs(val) for val in shift_list])
  44.  
  45. if __name__ == '__main__':
  46.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement