Sampling

Example:

import probpy as pp
import numpy as np

# gaussian mixture pdf
pdf = lambda x: pp.normal.p(x, 0, 1) + pp.normal.p(x, 6, 3) + pp.normal.p(x, -6, 0.5)

samples = pp.metropolis_hastings(size=50000,
                                 pdf=pdf,
                                 proposal=pp.normal.med(sigma=1.0),
                                 initial=-5)

# 100x faster but does not take custom proposal
samples = pp.fast_metropolis_hastings(size=50000,
                                      pdf=pdf,
                                      initial=np.random.rand(100),
                                      energy=1.0)
probpy.sampling.mcmc.fast_metropolis_hastings(size: int, pdf: typing.Callable[numpy.ndarray, numpy.ndarray], initial: numpy.ndarray, energy: float = 1.0)[source]
Parameters:
  • size – number of samples
  • pdf – pdf to sample from
  • initial – initial points
  • energy – variance of jumps
Returns:

array of samples

probpy.sampling.mcmc.fast_metropolis_hastings_log_space(size: int, log_pdf: typing.Callable[numpy.ndarray, numpy.ndarray], initial: numpy.ndarray, energy: float = 1.0)[source]
Parameters:
  • size – number of samples
  • log_pdf – log pdf
  • initial – initial points
  • energy – energy of estimate
Returns:

samples

probpy.sampling.mcmc.metropolis(size: int, pdf: typing.Callable[numpy.ndarray, numpy.ndarray], proposal: probpy.core.RandomVariable, M: float) → numpy.ndarray[source]
Parameters:
  • size – number of samples
  • pdf – pdf to sample from
  • proposal – proposal distribution
  • M – normalization constant
Returns:

array of samples

probpy.sampling.mcmc.metropolis_hastings(size: int, pdf: typing.Callable[numpy.ndarray, numpy.ndarray], proposal: probpy.core.RandomVariable, initial: numpy.ndarray = None) → typing.List[numpy.ndarray][source]
Parameters:
  • size – number of samples
  • pdf – pdf to sample from
  • proposal – proposal distribution
  • initial – starting point
Returns:

array of samples