def _kl_gumbel_gumbel(dist1, dist2): scale_1d2 = dist1.scale / dist2.scale return exponential.log(dist2.scale) - exponential.log(dist1.scale) \ + EULER * (scale_1d2 - 1.) \ + exponential.exp((dist2.loc - dist1.loc) / dist2.scale + lgamma.lgamma(scale_1d2 + 1.)) \ - 1 + (dist1.loc - dist2.loc) / dist2.scale
def log_prob(self, x): if isinstance(x, chainer.Variable): x = x.data x = x.astype(self.lam.dtype) xp1 = (x + 1).astype(self.lam.dtype) x, xp1 = utils.force_array(x), utils.force_array(xp1) return x * exponential.log(self.lam) - lgamma.lgamma(xp1) - self.lam
def _kl_gumbel_gumbel(dist1, dist2): scale_1d2 = dist1.scale / dist2.scale return dist2._log_scale - dist1._log_scale \ + EULER * (scale_1d2 - 1.) \ + exponential.exp((dist2.loc - dist1.loc) / dist2.scale + lgamma.lgamma(scale_1d2 + 1.)) \ - 1 + (dist1.loc - dist2.loc) / dist2.scale
def log_prob(self, x): logp = - lgamma.lgamma(self.k) - self.k * exponential.log(self.theta) \ + (self.k - 1) * exponential.log(x) - x / self.theta xp = logp.xp inf = xp.full_like(logp.array, xp.inf) if isinstance(x, chainer.Variable): x = x.array return where.where(xp.asarray(x >= 0), logp, xp.asarray(-inf))
def _kl_gamma_gamma(dist1, dist2): return (dist1.k - dist2.k) * digamma.digamma(dist1.k) \ - (lgamma.lgamma(dist1.k) - lgamma.lgamma(dist2.k)) \ + dist2.k\ * (exponential.log(dist2.theta) - exponential.log(dist1.theta)) \ + dist1.k * (dist1.theta / dist2.theta - 1)
def entropy(self): return ( self._half_k + numpy.log(2.) + lgamma.lgamma(self._half_k) + (1 - self._half_k) * digamma.digamma(self._half_k))
def _lbeta(x): return sum_mod.sum(lgamma.lgamma(x), axis=-1) \ - lgamma.lgamma(sum_mod.sum(x, axis=-1))
def _kl_gumbel_gumbel(dist1, dist2): scale_1d2 = dist1.scale / dist2.scale return (dist2._log_scale - dist1._log_scale + EULER * (scale_1d2 - 1.) + exponential.exp((dist2.loc - dist1.loc) / dist2.scale + lgamma.lgamma(scale_1d2 + 1.)) - 1 + (dist1.loc - dist2.loc) / dist2.scale)
def log_prob(self, x): return ( - lgamma.lgamma(self._half_k) - self._half_k * numpy.log(2.) + (self._half_k - 1) * exponential.log(x) - 0.5 * x)
def _lbeta(a, b): return lgamma.lgamma(a) + lgamma.lgamma(b) - lgamma.lgamma(a + b)
def entropy(self): return self.k + exponential.log(self.theta) + lgamma.lgamma(self.k) \ + (1 - self.k) * digamma.digamma(self.k)
def log_prob(self, x): return - lgamma.lgamma(0.5 * self.k) - 0.5 * self.k * numpy.log(2.) \ + (0.5 * self.k - 1) * exponential.log(x) - 0.5 * x
def entropy(self): return 0.5 * self.k + numpy.log(2.) + lgamma.lgamma(0.5 * self.k) \ + (1 - 0.5 * self.k) * digamma.digamma(0.5 * self.k)
def log_prob(self, x): return - lgamma.lgamma(self._half_k) - self._half_k * numpy.log(2.) \ + (self._half_k - 1) * exponential.log(x) - 0.5 * x
def entropy(self): return self._half_k + numpy.log(2.) + lgamma.lgamma(self._half_k) \ + (1 - self._half_k) * digamma.digamma(self._half_k)