Primitive Probability Distributions
Hakaru comes with a small set of primitive probability distributions.
normal(mean. real, standard_deviation. prob): measure(real) |
|
---|---|
univariate Normal (Gaussian) distribution | - |
uniform(low. real, high. real): measure(real) |
|
---|---|
Uniform distribution is a continuous univariate distribution defined from low to high | - |
gamma(shape. prob, scale. prob): measure(prob) |
|
---|---|
Gamma distribution with shape and scale parameterization | - |
beta(a. prob, b. prob): measure(prob) |
|
---|---|
Beta distribution | - |
poisson(l. prob): measure(nat) |
|
---|---|
Poisson distribution | - |
categorical(v. array(prob)): measure(nat) |
|
---|---|
Categorical distribution | - |
dirac(x. a): measure(a) |
|
---|---|
Dirac distribution | - |
The Dirac distribution appears often enough, that we have given an
additional keyword in our language for it: return
. The following
programs are equivalent.
dirac(3)
return 3
lebesgue(low. real, high.real): measure(real) |
|
---|---|
the distribution constant between low and high and zero elsewhere. high must be at least low . |
- |
weight(x. prob, m. measure(a)): measure(a) |
|
---|---|
a m distribution, reweighted by x | - |
reject: measure(a) |
|
---|---|
The distribution over the empty set | - |
Finally, we have a binary choice operator <|>
, which takes two
distributions, and returns an unnormalized distribution which returns
one or the other. For example, to get a distribution which where with
probability 0.5 draws from a uniform(0,1), and probability 0.5 draws
from uniform(5,6).
weight(0.5, uniform(0,1)) <|>
weight(0.5, uniform(5,6))