Source code for tramp.likelihoods.abs_likelihood

import numpy as np
from scipy.stats import norm
from .base_likelihood import Likelihood
from ..utils.integration import gaussian_measure_2d
from ..beliefs import binary


[docs]class AbsLikelihood(Likelihood): def __init__(self, y, y_name="y", isotropic=True): self.y_name = y_name self.size = self.get_size(y) self.isotropic = isotropic self.repr_init() self.y = y def sample(self, X): return np.abs(X) def math(self): return r"$\mathrm{abs}$" def scalar_backward_mean(self, az, bz, y): return y * binary.r(bz * y) def scalar_backward_variance(self, az, bz, y): return (y**2) * binary.v(bz * y) def scalar_log_partition(self, az, bz, y): return -0.5*az*(y**2) + binary.A(bz * y) def compute_backward_posterior(self, az, bz, y): rz = y * binary.r(bz * y) vz = (y**2) * binary.v(bz * y) if self.isotropic: vz = vz.mean() return rz, vz def compute_log_partition(self, az, bz, y): A = -0.5*az*(y**2) + binary.A(bz * y) return A.mean() def b_measure(self, mz_hat, qz_hat, tz0_hat, f): def integrand(z, xi_b): bz = mz_hat * z + np.sqrt(qz_hat) * xi_b y = np.abs(z) return f(bz, y) tz0 = 1 / tz0_hat mu = gaussian_measure_2d(0, np.sqrt(tz0), 0, 1, integrand) return mu def bz_measure(self, mz_hat, qz_hat, tz0_hat, f): def integrand(z, xi_b): bz = mz_hat * z + np.sqrt(qz_hat) * xi_b y = np.abs(z) return z*f(bz, y) tz0 = 1 / tz0_hat mu = gaussian_measure_2d(0, np.sqrt(tz0), 0, 1, integrand) return mu def beliefs_measure(self, az, tau_z, f): mz_hat = az - 1 / tau_z assert mz_hat > 0 , "az must be greater than 1/tau_z" def integrand(z, xi_b): bz = mz_hat * z + np.sqrt(mz_hat) * xi_b y = np.abs(z) return f(bz, y) mu = gaussian_measure_2d(0, np.sqrt(tau_z), 0, 1, integrand) return mu def measure(self, y, f): return f(+y) + f(-y)