Version 0.8.7 released! See the CHANGELOG and notebooks.
ELFI is a statistical software package written in Python for likelihood-free inference (LFI) such as Approximate Bayesian Computation (ABC). The term LFI refers to a family of inference methods that replace the use of the likelihood function with a data generating simulator function. ELFI features an easy to use generative modeling syntax and supports parallelized inference out of the box.
Currently implemented LFI methods:
- ABC Rejection sampler
- Sequential Monte Carlo ABC sampler
- SMC-ABC sampler with adaptive threshold selection
- SMC-ABC sampler with adaptive distance
- Bayesian Optimization for Likelihood-Free Inference (BOLFI)
- Robust Optimisation Monte Carlo (ROMC)
- Bayesian Optimization for Likelihood-Free Inference by Ratio Estimation (BOLFIRE)
- Bayesian Synthetic Likelihood (BSL)
Other notable included algorithms and methods:
- Bayesian Optimization
- No-U-Turn-Sampler, a Hamiltonian Monte Carlo MCMC sampler
ELFI also integrates tools for visualization, model comparison, diagnostics and post-processing.
See examples under notebooks to get started. Full documentation can be found at http://elfi.readthedocs.io/. Limited user-support may be asked from elfi-support.at.hiit.fi, but the Gitter chat is preferable.
ELFI requires Python 3.9 or greater. You can install ELFI by typing in your terminal:
pip install elfi
or on some platforms using Python 3 specific syntax:
pip3 install elfi
Note that in some environments you may need to first install numpy
with
pip install numpy
. This is due to our dependency to GPy
that uses numpy
in its installation.
Installing elfi
from the conda-forge
channel can be achieved by adding conda-forge
to your channels with:
conda config --add channels conda-forge
Once the conda-forge
channel has been enabled, elfi
can be installed with:
conda install elfi
It is possible to list all of the versions of elfi
available on your platform with:
conda search elfi --channel conda-forge
graphviz
for drawing graphical models (needs Graphviz), highly recommended
If you are new to Python, perhaps the simplest way to install a specific version of Python is with Anaconda.
It is very practical to create a virtual Python environment. This way you won't interfere with your default Python environment and can easily use different versions of Python in different projects. You can create a virtual environment for ELFI using anaconda with:
conda create -n elfi python=3.9 numpy
source activate elfi
pip install elfi
A simple Dockerfile with Jupyter support is also provided. This is especially suitable for running tests. Please see Docker documentation for details.
git clone --depth 1 https://github.com/elfi-dev/elfi.git
cd elfi
make docker-build # builds the image with requirements for dev
make docker # runs a container with live elfi directory
To open a Jupyter notebook, run
jupyter notebook --ip 0.0.0.0 --no-browser --allow-root
within the container and then on host open the page http://localhost:8888.
ELFI depends on several other Python packages, which have their own dependencies. Resolving these may sometimes go wrong:
- If you receive an error about missing
numpy
, please install it first. - If you receive an error about
yaml.load
, installpyyaml
. - On OS X with Anaconda virtual environment say
conda install python.app
and then usepythonw
instead ofpython
. - Note that ELFI requires Python 3.9 or greater so try
pip3 install elfi
. - Make sure your Python installation meets the versions listed in
requirements.txt
.
If you wish to cite ELFI, please use the paper in JMLR:
@article{JMLR:v19:17-374,
author = {Jarno Lintusaari and Henri Vuollekoski and Antti Kangasr{\"a}{\"a}si{\"o} and Kusti Skyt{\'e}n and Marko J{\"a}rvenp{\"a}{\"a} and Pekka Marttinen and Michael U. Gutmann and Aki Vehtari and Jukka Corander and Samuel Kaski},
title = {ELFI: Engine for Likelihood-Free Inference},
journal = {Journal of Machine Learning Research},
year = {2018},
volume = {19},
number = {16},
pages = {1-7},
url = {http://jmlr.org/papers/v19/17-374.html}
}