No-U-Turn Sampler (NUTS)¶
-
class
sampyl.
NUTS
(logp, start, step_size=0.25, adapt_steps=100, Emax=1000.0, target_accept=0.65, gamma=0.05, k=0.75, t0=10.0, **kwargs)¶ No-U-Turn sampler (Hoffman & Gelman, 2014) for sampling from a probability distribution defined by a log P(theta) function.
For technical details, see the paper: http://www.stat.columbia.edu/~gelman/research/published/nuts.pdf
Parameters: - logp – log P(X) function for sampling distribution
- start – Dictionary of starting state for the sampler. Should have one element for each argument of logp.
- grad_logp –
(optional) Function or list of functions that calculate grad log P(theta). Pass functions here if you don’t want to use autograd for the gradients. If logp has multiple parameters, grad_logp must be a list of gradient functions w.r.t. each parameter in logp.
If you wish to use a logp function that returns both the logp value and the gradient, set grad_logp = True.
- scale – (optional) Dictionary with same format as start. Scaling for initial momentum in Hamiltonian step.
- step_size – (optional) float. Initial step size for the deterministic proposals.
- adapt_steps – (optional) int. Integer number of steps used for adapting the step size to achieve a target acceptance rate.
- Emax – (optional) float. Maximum energy.
- target_accept – (optional) float. Target acceptance rate.
- gamma – (optional) float.
- k – (optional) float. Scales the speed of step size adaptation.
- t0 – (optional) float. Slows initial step size adaptation.
Example
def logp(x, y): ... start = {'x': x_start, 'y': y_start} nuts = sampyl.NUTS(logp, start) chain = nuts.sample(1000)
-
sample
(num, burn=0, thin=1, n_chains=1, progress_bar=True)¶ Sample from \(P(X)\)
Parameters: - num – int. Number of samples to draw from \(P(X)\).
- burn – (optional) int. Number of samples to discard from the beginning of the chain.
- thin – (optional) float. Thin the samples by this factor.
- n_chains – (optional) int. Number of chains to return. Each chain is given its own process and the OS decides how to distribute the processes.
- progress_bar – (optional) boolean. Show the progress bar, default = True.
Returns: Record array with fields taken from arguments of logp function.
-
step
()¶ Perform one NUTS step.