Classy non-linear optimisation
Project description
PyAutoFit
PyAutoFit is a Python-based probablistic programming language that allows complex model fitting techniques to be straightforwardly integrated into scientific modeling software. PyAutoFit specializes in:
- Black box models with complex and expensive log likelihood functions.
- Fitting many different model parametrizations to a data-set.
- Modeling extremely large-datasets with a homogenous fitting procedure.
- Automating complex model-fitting tasks via transdimensional model-fitting pipelines.
API Overview
To illustrate the PyAutoFit API, we'll use an illustrative toy model of fitting a one-dimensional Gaussian to noisy 1D data of a Gaussian's line profile. Here's an example of the data (blue) and the model we'll fit (orange):
.. 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, # <- PyAutoFit recognises these
centre = 0.0, # <- constructor arguments are
intensity = 0.1, # <- the model parameters of .
sigma = 0.01, # <- the Gaussian.
):
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 line_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 non-linear search 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 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 (random) 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
"line_from_xvalues" function to create the model data.
"""
xvalues = np.arange(self.data.shape[0])
model_data = instance.line_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 data to the model using a non-linear search of our choice.
.. code-block:: python
model = af.PriorModel(Gaussian)
analysis = a.Analysis(data=data, noise_map=noise_map)
emcee = af.Emcee(nwalkers=50, nsteps=2000)
result = emcee.fit(model=model, analysis=analysis)
The result object contains information on the model-fit, for example the parameter samples, best-fit 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 and detailed API documentation.
Slack
We're building a PyAutoFit community on Slack, so you should contact us on our
Slack channel <https://pyautofit.slack.com/>
_ before getting started. Here, I give the latest updates on the
software & can discuss how best to use PyAutoFit for your science case.
Unfortunately, Slack is invitation-only, so first send me 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.60.1.tar.gz
.
File metadata
- Download URL: autofit-0.60.1.tar.gz
- Upload date:
- Size: 96.9 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 | a3d2b7d55ae9029c7f7edc636c4907aa5cc100ff82a23b8b8aed9d47581e0133 |
|
MD5 | 67e54efaf9ffd60913fa172630994004 |
|
BLAKE2b-256 | 3058c38280212489ac8739ca8954d1908b2be902c7cd89e9c6def128e457f69d |
File details
Details for the file autofit-0.60.1-py3-none-any.whl
.
File metadata
- Download URL: autofit-0.60.1-py3-none-any.whl
- Upload date:
- Size: 132.2 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 | e8ef06326faa168a719de537d28fa081b39a720ef68eec395902e9b06c218c7f |
|
MD5 | a394655a267af3bf64a2b262e6efc161 |
|
BLAKE2b-256 | 39952720b5ffbb2d30982541ab181ddc30c97e8e81fb68b4fe82fb8135a9d0cd |