Alex Herbert created RNG-156:
--------------------------------
Summary: Dirichlet distribution sampler
Key: RNG-156
URL: https://issues.apache.org/jira/browse/RNG-156
Project: Commons RNG
Issue Type: New Feature
Components: sampling
Affects Versions: 1.4
Reporter: Alex Herbert
Add sampling from a [Dirichlet
distribution|https://en.wikipedia.org/wiki/Dirichlet_distribution#Random_number_generation].
Samples can be produced by generating Gamma(shape=alpha, scale=1) deviates for
each category with concentration alpha, summing the deviates and dividing by
the sum.
Proposed public API.
{code:java}
public abstract class DirichletSampler
implements SharedStateObjectSampler<double[]> {
public double[] sample();
public DirichletSampler withUniformRandomProvider(UniformRandomProvider
rng);
public static DirichletSampler of(UniformRandomProvider rng,
double... alpha);
public static DirichletSampler symmetric(UniformRandomProvider rng,
int k,
double alpha);
}
{code}
The symmetric case is a special case where the alpha concentration parameters
are the same for all categories. This can be implemented with a single sampler
which reduces memory footprint. This is especially true when alpha > 1 as a
AhrensDieterMarsagliaTsangGammaSampler holds two precomputed values and a
normalised Gaussian sampler.
An example of using a symmetric case is a unit Simplex which uses dimension k
and alpha=1.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)