Classy Probabilistic Programming
Project description
PyAutoFit
PyAutoFit is a Python-based probabilistic programming language which:
- Makes it straight forward to compose and fit models using a range of Bayesian inference libraries, such as
emcee <https://github.com/dfm/emcee>
_ anddynesty <https://github.com/joshspeagle/dynesty>
_. - Handles the 'heavy lifting' of model fitting, including model composition and customization, outputting results in a structured path format and model-specific visualization.
- Includes bespoke tools for big-data analysis, including massively parallel model fitting and database output structures so that large suites of results can be loaded into Jupyter notebooks post-analysis.
Advanced statistical methods in PyAutoFit include:
- Graphical Models: Combine fits to many different datasets and determine the global parameters of a model, using an
Expectation Propagation Bayesian framework <https://arxiv.org/abs/1412.4869v1>
_. - Non-Linear Search Grid-Search: Simplify the fitting of highly complex parameters spaces by using a grid of non-linear searches, which can be performed simultaneously in an embarrassingly parallel fashion.
- Transdimensional Pipelines: Chain together multiple fits of different models to streamline model comparison and automate complex model-fitting tasks.
Installation
PyAutoFit requires Python 3.6+ and you can install it via pip or conda (see
this link <https://pyautofit.readthedocs.io/en/latest/general/installation.html#installation-with-conda>
_
for conda instructions).
.. code-block:: bash
pip install autofit
Next, clone the autofit_workspace <https://github.com/Jammy2211/autofit_workspace>
_, which includes PyAutoFit
configuration files, example scripts and more!
.. code-block:: bash
cd /path/on/your/computer/you/want/to/put/the/autofit_workspace git clone https://github.com/Jammy2211/autofit_workspace --depth 1 cd autofit_workspace
Finally, run welcome.py in the autofit_workspace
to get started!
.. code-block:: bash
python3 welcome.py
If your installation had an error, please check the
troubleshooting section <https://pyautofit.readthedocs.io/en/latest/general/installation.html#trouble-shooting>
_ on
our readthedocs.
If you would prefer to Fork / Clone the PyAutoFit GitHub repo, please read the
cloning section <https://pyautofit.readthedocs.io/en/latest/general/installation.html#forking-cloning>
_ on our
readthedocs first.
API Overview
To illustrate the PyAutoFit API, we'll use an illustrative toy model of fitting a one-dimensional Gaussian to
noisy 1D data. Here's the data
(black) and the model (red) we'll fit:
.. image:: https://raw.githubusercontent.com/rhayes777/PyAutoFit/master/toy_model_fit.png :width: 400 :alt: Alternative text
We define our model, a 1D Gaussian by writing a Python class using the format below:
.. code-block:: python
class Gaussian:
def __init__(
self,
centre=0.0, # <- PyAutoFit recognises these
intensity=0.1, # <- constructor arguments are
sigma=0.01, # <- the Gaussian's parameters.
):
self.centre = centre
self.intensity = intensity
self.sigma = sigma
"""
An instance of the Gaussian class will be available during model fitting.
This method will be used to fit the model to ``data`` and compute a likelihood.
"""
def profile_from_xvalues(self, xvalues):
transformed_xvalues = xvalues - self.centre
return (self.intensity / (self.sigma * (2.0 * np.pi) ** 0.5)) * \
np.exp(-0.5 * transformed_xvalues / self.sigma)
PyAutoFit recognises that this Gaussian may be treated as a model component whose parameters can be fitted for via
a NonLinearSearch
like emcee <https://github.com/dfm/emcee>
_.
To fit this Gaussian to the data
we create an Analysis object, which gives PyAutoFit the data
and a
log_likelihood_function
describing how to fit the data
with the model:
.. code-block:: python
class Analysis(af.Analysis):
def __init__(self, data, noise_map):
self.data = data
self.noise_map = noise_map
def log_likelihood_function(self, instance):
"""
The 'instance' that comes into this method is an instance of the Gaussian class
above, with the parameters set to values chosen by the non-linear search.
"""
print("Gaussian Instance:")
print("Centre = ", instance.centre)
print("Intensity = ", instance.intensity)
print("Sigma = ", instance.sigma)
"""
We fit the ``data`` with the Gaussian instance, using its
"profile_from_xvalues" function to create the model data.
"""
xvalues = np.arange(self.data.shape[0])
model_data = instance.profile_from_xvalues(xvalues=xvalues)
residual_map = self.data - model_data
chi_squared_map = (residual_map / self.noise_map) ** 2.0
log_likelihood = -0.5 * sum(chi_squared_map)
return log_likelihood
We can now fit our model to the data
using a NonLinearSearch
:
.. code-block:: python
model = af.PriorModel(Gaussian)
analysis = Analysis(data=data, noise_map=noise_map)
emcee = af.Emcee(nwalkers=50, nsteps=2000)
result = emcee.fit(model=model, analysis=analysis)
The result
contains information on the model-fit, for example the parameter samples, maximum log likelihood
model and marginalized probability density functions.
Getting Started
To get started checkout our readthedocs <https://pyautofit.readthedocs.io/>
,
where you'll find our installation guide, a complete overview of PyAutoFit's features, examples scripts and
tutorials, detailed API documentation and the HowToFit lecture series <https://pyautofit.readthedocs.io/en/latest/howtofit/howtofit.html>
on how to integrate PyAutoFit into your modeling software.
Support
Support for installation issues and integrating your modeling software with PyAutoFit is available by
raising an issue on the autofit_workspace GitHub page <https://github.com/Jammy2211/autofit_workspace/issues>
. or
joining the PyAutoFit Slack channel <https://pyautofit.slack.com/>
, where we also provide the latest updates on
PyAutoFit.
Slack is invitation-only, so if you'd like to join send an email <https://github.com/Jammy2211>
_ requesting an
invite.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file autofit-0.69.6.tar.gz
.
File metadata
- Download URL: autofit-0.69.6.tar.gz
- Upload date:
- Size: 169.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 782a6d0f1a2cb0083717f5c27c417cc5777503a70d62b4f3a8b3d2f2629c644c |
|
MD5 | 44bf8115aae7a5af73236967d73d6db5 |
|
BLAKE2b-256 | 286ca27e486e4bb1ac9140b3dd2deb8f54b3dcacee528839f43dd172ecd086df |
File details
Details for the file autofit-0.69.6-py3-none-any.whl
.
File metadata
- Download URL: autofit-0.69.6-py3-none-any.whl
- Upload date:
- Size: 245.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ed1c7db25df7e10378924269040cd3d3259a5ed53d9160eeee58bc932ee82932 |
|
MD5 | 1370c96c351e5f3abf7780e055543616 |
|
BLAKE2b-256 | e220fbeb22193ac12128c2e3a442095f82eaf28fded81548883f8be9f7a2277c |