Пример #1
0
 def logpmf(self, x, n, p):
     x, n, p = _promote_dtypes(x, n, p)
     if self.is_logits:
         return gammaln(n + 1) + np.sum(x * p - gammaln(x + 1),
                                        axis=-1) - n * logsumexp(p, axis=-1)
     else:
         return gammaln(n + 1) + np.sum(xlogy(x, p) - gammaln(x + 1),
                                        axis=-1)
Пример #2
0
 def _logpmf(self, x, n, p):
     x, n, p = _promote_dtypes(x, n, p)
     combiln = gammaln(n + 1) - (gammaln(x + 1) + gammaln(n - x + 1))
     if self.is_logits:
         # TODO: move this implementation to PyTorch if it does not get non-continuous problem
         # In PyTorch, k * logit - n * log1p(e^logit) get overflow when logit is a large
         # positive number. In that case, we can reformulate into
         # k * logit - n * log1p(e^logit) = k * logit - n * (log1p(e^-logit) + logit)
         #                                = k * logit - n * logit - n * log1p(e^-logit)
         # More context: https://github.com/pytorch/pytorch/pull/15962/
         return combiln + x * p - (n * jnp.clip(p, 0) + xlog1py(n, jnp.exp(-jnp.abs(p))))
     else:
         return combiln + xlogy(x, p) + xlog1py(n - x, -p)
Пример #3
0
 def _ppf(self, q, a, b):
     q, a, b = _promote_dtypes(q, a, b)
     # XXX: consider to use norm._ppf(q * norm._cdf(b) + norm._cdf(a) * (1.0 - q))
     # when a, b < 0
     ppf = norm._isf(q * norm._sf(b) + norm._sf(a) * (1.0 - q))
     return ppf
Пример #4
0
 def _logpdf(self, x, a, b):
     x, a, b = _promote_dtypes(x, a, b)
     # XXX: consider to use norm._cdf(b) - norm._cdf(a) when a, b < 0
     delta = norm._sf(a) - norm._sf(b)
     return norm._logpdf(x) - np.log(delta)
Пример #5
0
 def _logpmf(self, x, mu):
     x, mu = _promote_dtypes(x, mu)
     Pk = xlogy(x, mu) - gammaln(x + 1) - mu
     return Pk
Пример #6
0
 def _logpmf(self, x, n, p):
     k = np.floor(x)
     n, p = _promote_dtypes(n, p)
     combiln = (gammaln(n + 1) - (gammaln(k + 1) + gammaln(n - k + 1)))
     return combiln + xlogy(k, p) + xlog1py(n - k, -p)
Пример #7
0
 def _logpmf(self, x, n, p):
     n, p, x = _promote_dtypes(n, p, x)
     return gammaln(n + 1) + np.sum(xlogy(x, p) - gammaln(x + 1), axis=-1)