def calc_log_posterior(theta, x, n=None):
"""Calculate unnormalized log posterior, ``log p(theta | x) + C``
Args:
theta(chainer.Variable): model parameters
x(numpy.ndarray): sample data
n(int): total data size
Returns:
chainer.Variable: Variable that holding unnormalized log posterior,
``log p(theta | x) + C`` of shape ``()``
"""
theta1, theta2 = F.split_axis(theta, 2, 0)
log_prior1 = F.sum(F.log(gaussian.gaussian_likelihood(theta1, 0, VAR1)))
log_prior2 = F.sum(F.log(gaussian.gaussian_likelihood(theta2, 0, VAR2)))
prob1 = gaussian.gaussian_likelihood(x, theta1, VAR_X)
prob2 = gaussian.gaussian_likelihood(x, theta1 + theta2, VAR_X)
log_likelihood = F.sum(F.log(prob1 / 2 + prob2 / 2))
if n is not None:
log_likelihood *= n / len(x)
return log_prior1 + log_prior2 + log_likelihood
评论列表
文章目录