Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
probml
GitHub Repository: probml/pyprobml
Path: blob/master/deprecated/scripts/bb_grid_approx.py
1192 views
1
# 1d grid approixmation to beta binomial model
2
# https://github.com/aloctavodia/BAP
3
4
import superimport
5
6
import numpy as np
7
import scipy.stats as stats
8
import matplotlib.pyplot as plt
9
import pyprobml_utils as pml
10
11
def posterior_grid(heads, tails, grid_points=100):
12
grid = np.linspace(0, 1, grid_points)
13
prior = np.repeat(1/grid_points, grid_points) # uniform prior
14
likelihood = stats.binom.pmf(heads, heads+tails, grid)
15
posterior = likelihood * prior
16
posterior /= posterior.sum()
17
return grid, posterior
18
19
data = np.repeat([0, 1], (10, 3))
20
h = data.sum()
21
t = len(data) - h
22
grid, posterior = posterior_grid(h, t, 20)
23
24
plt.stem(grid, posterior, use_line_collection=True)
25
plt.title('grid approximation')
26
plt.yticks([])
27
plt.xlabel('θ')
28
pml.savefig('bb_grid.pdf')
29
30
plt.figure()
31
x = np.linspace(0, 1, 100)
32
xs = x #grid
33
post_exact = stats.beta.pdf(xs, h+1, t+1)
34
post_exact = post_exact / np.sum(post_exact)
35
plt.plot(xs, post_exact)
36
plt.title('exact posterior')
37
pml.savefig('bb_exact.pdf')
38
39
plt.show()
40