def _kl_beta_beta(dist1, dist2): dist1_apb = dist1.a + dist1.b dist2_apb = dist2.a + dist2.b return - _lbeta(dist1.a, dist1.b) + _lbeta(dist2.a, dist2.b)\ + (dist1.a - dist2.a) * digamma.digamma(dist1.a) \ + (dist1.b - dist2.b) * digamma.digamma(dist1.b) \ + (dist2_apb - dist1_apb) * digamma.digamma(dist1_apb)
def _kl_beta_beta(dist1, dist2): dist1_apb = dist1._a_plus_b dist2_apb = dist2._a_plus_b return (-_lbeta(dist1.a, dist1.b) + _lbeta(dist2.a, dist2.b) + (dist1.a - dist2.a) * digamma.digamma(dist1.a) + (dist1.b - dist2.b) * digamma.digamma(dist1.b) + (dist2_apb - dist1_apb) * digamma.digamma(dist1_apb))
def _kl_beta_beta(dist1, dist2): dist1_apb = dist1.a + dist1.b dist2_apb = dist2.a + dist2.b return - _lbeta(dist1.a, dist1.b) + _lbeta(dist2.a, dist2.b)\ + (dist1.a - dist2.a) * digamma.digamma(dist1.a) \ + (dist1.b - dist2.b) * digamma.digamma(dist1.b) \ + (dist2_apb - dist1_apb) * digamma.digamma(dist1_apb)
def entropy(self): return ( _lbeta(self.alpha) + ((self.alpha0 - self.event_shape[0]) * digamma.digamma(self.alpha0)) - sum_mod.sum( (self.alpha - 1) * digamma.digamma(self.alpha), axis=-1))
def _kl_dirichlet_dirichlet(dist1, dist2): return ( - _lbeta(dist1.alpha) + _lbeta(dist2.alpha) + sum_mod.sum( (dist1.alpha - dist2.alpha) * (digamma.digamma(dist1.alpha) - expand_dims.expand_dims( digamma.digamma(dist1.alpha0), axis=-1)), axis=-1))
def entropy(self): return _lbeta(self.alpha) \ + (self.alpha0 - self.event_shape[0]) \ * digamma.digamma(self.alpha0) \ - sum_mod.sum((self.alpha - 1) * digamma.digamma(self.alpha), axis=-1)
def entropy(self): apb = self.a + self.b return _lbeta(self.a, self.b) \ - (self.a - 1) * digamma.digamma(self.a) \ - (self.b - 1) * digamma.digamma(self.b) \ + (apb - 2) * digamma.digamma(apb)
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.k + exponential.log(self.theta) + lgamma.lgamma(self.k) \ + (1 - self.k) * digamma.digamma(self.k)
def entropy(self): apb = self.a + self.b return _lbeta(self.a, self.b) \ - (self.a - 1) * digamma.digamma(self.a) \ - (self.b - 1) * digamma.digamma(self.b) \ + (apb - 2) * digamma.digamma(apb)
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 entropy(self): return self._half_k + numpy.log(2.) + lgamma.lgamma(self._half_k) \ + (1 - self._half_k) * digamma.digamma(self._half_k)
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 entropy(self): apb = self._a_plus_b return (_lbeta(self.a, self.b) - (self.a - 1) * digamma.digamma(self.a) - (self.b - 1) * digamma.digamma(self.b) + (apb - 2) * digamma.digamma(apb))
def entropy(self): return _lbeta(self.alpha) \ + (self.alpha0 - self.event_shape[0]) \ * digamma.digamma(self.alpha0) \ - sum_mod.sum((self.alpha - 1) * digamma.digamma(self.alpha), axis=-1)
def _kl_dirichlet_dirichlet(dist1, dist2): return - _lbeta(dist1.alpha) + _lbeta(dist2.alpha) \ + sum_mod.sum((dist1.alpha - dist2.alpha) * ( digamma.digamma(dist1.alpha) - expand_dims.expand_dims(digamma.digamma( dist1.alpha0), axis=-1)), axis=-1)
def entropy(self): return self.k + exponential.log(self.theta) + lgamma.lgamma(self.k) \ + (1 - self.k) * digamma.digamma(self.k)
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 0.5 * self.k + numpy.log(2.) + lgamma.lgamma(0.5 * self.k) \ + (1 - 0.5 * self.k) * digamma.digamma(0.5 * self.k)