Skip to content

guillerminasenn/mess

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

README.md

MESS: Multiproposal Elliptical Slice Sampling

This repository accompanies the pre-print "Multproposal Elliptical Slice Sampling".


Key concepts

ESS and MESS

  • Elliptical Slice Sampling (ESS) is recovered by setting M = 1.
  • MESS proposes M candidate angles per subiteration and accepts one uniformly or based on a transition matrix.
  • All algorithms require: sampling from a Gaussian prior and evaluating a log-likelihood.

Design principles

  1. Algorithms are model-agnostic

    • Samplers only need a prior sampler and a log-likelihood.
  2. Each problem constructs its own prior

    • Prior mean and covariance are derived in the problem class.
    • Problems considered: examples 1 (GP) and 2 (LR) in Murray et. al (2010), Semi-Blind Deconvolution from Senn et al. (2025, 2026), toy model for solute transport from Glatt-Holtz et al. (2024).
  3. Gaussian priors only

    • All problems inherit from GaussianPriorProblem.
    • Gaussian sampling is performed via Cholesky decomposition.

Repository structure

src/mess/algorithms

  • ess.py: ESS (equivalent to MESS with M = 1)
  • mess.py: MESS with optional LP-based transition matrices
  • utils.py: angle sampling, bracket logic, and helper routines

src/mess/problems

All problems implement log_likelihood(x) and provide prior construction.

  • gp_regression.py: Gaussian process regression
  • logistic_regression.py: Bayesian logistic regression
  • sbd.py: semi-blind deconvolution inverse problem
  • advection_diffusion.py: toy solute transport inverse problem

src/mess/kernels

  • stationary.py: RBF and exponential kernels for GP priors

src/mess/data

  • Synthetic data generators used by the notebooks and tests

Notebooks

The notebooks/ directory reproduces the experiments and figures used in the paper.

  • gp_regression.ipynb: baseline ESS/MESS comparison on GP regression.
  • logistic_regression_ess_mess.ipynb: Bayesian logistic regression with multiple distance metrics.
  • sbd_ess_mess.ipynb: semi-blind deconvolution.
  • solute_transport_d10_mess_ellipse_iter10000.ipynb: solute transport toy problem at fixed dimension.
  • solute_transport_dim_sweep_shared_draws.ipynb: solute transport dimension sweep with shared draws.
  • solute_transport_dim_sweep_shared_draws_lp_compare.ipynb: LP-based transition comparison for the dimension sweep.

Typical usage

import numpy as np
from mess.data.gp_regression import generate_gp_regression_data
from mess.problems.gp_regression import GaussianProcessRegression
from mess.algorithms.ess import ess_step

data = generate_gp_regression_data(seed=0)
problem = GaussianProcessRegression(
    X=data["X"],
    y=data["y"],
    length_scale=1.0,
    noise_variance=0.09,
)

x = data["f_init"]
rng = np.random.default_rng(0)
for _ in range(1000):
    x, _, _ = ess_step(x, problem, rng)

About

Multiproposal Elliptical Slice Sampling

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors