Probabilistic Model Zoo¶
Bayesian Linear Regression¶
import edward as ed
import inferpy as inf
from inferpy.models import Normal
import numpy as np
d, N = 1, 20000
# model definition
with inf.ProbModel() as m:
#define the weights
w0 = Normal(0,1)
#with inf.replicate(size=d):
w = Normal(0, 1)
# define the generative model
with inf.replicate(size=N):
x = Normal(0, 1, observed=True, dim=d)
#y = Normal(w0 + inf.matmul(x,w), 1.0, observed=True)
y = Normal(w0 + w*x, 1.0, observed=True)
# toy data generation
x_train = inf.models.Normal(loc=10, scale=5, dim=d).sample(N)
y_train = x_train/10 + inf.models.Normal(loc=0, scale=5, dim=d).sample(N)
data = {x.name: x_train, y.name: y_train}
data
# compile and fit the model with training data
m.compile()
m.fit(data)
print(m.posterior([w, w0]))
Bayesian Logistic Regression¶
import edward as ed
import inferpy as inf
from inferpy.models import Normal, Bernoulli, Categorical
import numpy as np
d, N = 10, 500
# model definition
with inf.ProbModel() as m:
#define the weights
w0 = Normal(0,1)
with inf.replicate(size=d):
w = Normal(0, 1)
# define the generative model
with inf.replicate(size=N):
x = Normal(0, 1, observed=True, dim=d)
p = w0 + inf.matmul(x, w)
y = Bernoulli(logits = p, observed=True)
# toy data generation
x_train = Normal(loc=0, scale=1, dim=d).sample(N)
y_train = Bernoulli(probs=[0.4]).sample(N)
data = {x.name: x_train, y.name: np.reshape(y_train, (N,1))}
# compile and fit the model with training data
m.compile()
m.fit(data)
print(m.posterior([w, w0]))
Bayesian Multinomial Logistic Regression¶
import edward as ed
import inferpy as inf
from inferpy.models import Normal, Bernoulli, Categorical
import numpy as np
d, N = 10, 500
#number of classes
K = 3
# model definition
with inf.ProbModel() as m:
#define the weights
w0 = Normal(0,1, dim=K)
with inf.replicate(size=d):
w = Normal(0, 1, dim=K)
# define the generative model
with inf.replicate(size=N):
x = Normal(0, 1, observed=True, dim=d)
p = w0 + inf.matmul(x, w)
y = Bernoulli(logits = p, observed=True)
# toy data generation
x_train = Normal(loc=0, scale=1, dim=d).sample(N)
y_train = Bernoulli(probs=np.random.rand(K)).sample(N)
data = {x.name: x_train, y.name: np.reshape(y_train, (N,K))}
# compile and fit the model with training data
m.compile()
m.fit(data)
print(m.posterior([w, w0]))
Linear Factor Model (PCA)¶
Linear Factor Model
import edward as ed
import inferpy as inf
from inferpy.models import Normal
K, d, N = 5, 10, 200
# model definition
with inf.ProbModel() as m:
#define the weights
with inf.replicate(size=K):
w = Normal(0, 1, dim=d)
# define the generative model
with inf.replicate(size=N):
z = Normal(0, 1, dim=K)
x = Normal(inf.matmul(z,w),
1.0, observed=True, dim=d)
# toy data generation
x_train = Normal(loc=0, scale=1., dim=d).sample(N)
data = {x.name: x_train}
# compile and fit the model with training data
m.compile()
m.fit(data)
#extract the hidden representation from a set of observations
hidden_encoding = m.posterior(z)
PCA with ARD Prior (PCA)¶
import edward as ed
import inferpy as inf
from inferpy.models import Normal, InverseGamma
K, d, N = 5, 10, 200
# model definition
with inf.ProbModel() as m:
#define the weights
with inf.replicate(size=K):
w = Normal(0, 1, dim=d)
sigma = InverseGamma(1.0,1.0)
# define the generative model
with inf.replicate(size=N):
z = Normal(0, 1, dim=K)
x = Normal(inf.matmul(z,w),
sigma, observed=True, dim=d)
# toy data generation
x_train = Normal(loc=0, scale=1., dim=d).sample(N)
data = {x.name: x_train}
# compile and fit the model with training data
m.compile()
m.fit(data)
#extract the hidden representation from a set of observations
hidden_encoding = m.posterior(z)
Matrix Factorization¶
import inferpy as inf
from inferpy.models import Normal
N=200
M=50
K=5
# Shape [M,K]
with inf.replicate(size=K):
gamma = Normal(0,1, dim=M)
# Shape [N,K]
with inf.replicate(size=N):
w = Normal(0,1, dim=K)
# x_mn has shape [N,K] x [K,M] = [N,M]
with inf.replicate(size=N):
x = Normal(inf.matmul(w,gamma), 1, observed = True)
m = inf.ProbModel([w,gamma,x])
data = m.sample(size=N)
log_prob = m.log_prob(data)
m.compile(infMethod = 'KLqp')
m.fit(data)
print(m.posterior([w,gamma]))