Project Name | Stars | Downloads | Repos Using This | Packages Using This | Most Recent Commit | Total Releases | Latest Release | Open Issues | License | Language |
---|---|---|---|---|---|---|---|---|---|---|
Sherpa | 137 | 2 days ago | 471 | gpl-3.0 | Python | |||||
Fit models to your data in Python with Sherpa. | ||||||||||
Polychordlite | 65 | 3 months ago | 18 | other | Fortran | |||||
Public version of PolyChord: See polychord.co.uk for PolyChordPro | ||||||||||
Machinelearningstatistics | 54 | 2 years ago | 1 | bsd-3-clause | Jupyter Notebook | |||||
Machine learning and statistics for physicists | ||||||||||
Pyautofit | 49 | 3 | 5 | 2 days ago | 278 | June 29, 2022 | 34 | mit | Python | |
PyAutoFit: Classy Probabilistic Programming | ||||||||||
Mistree | 33 | 2 months ago | 2 | mit | Python | |||||
A python package for constructing and analysing minimum spanning trees. | ||||||||||
Anki_science | 22 | 3 years ago | Jupyter Notebook | |||||||
Anki decks for physics, astronomy, computer science, machine learning, and statistics. | ||||||||||
Nmmn | 17 | 3 months ago | 1 | mit | Python | |||||
Miscellaneous methods for: astronomy, dealing with arrays, statistical distributions, computing goodness-of-fit, numerical simulations and much more | ||||||||||
Rcosmo | 15 | 8 months ago | 5 | December 01, 2021 | agpl-3.0 | R | ||||
Handle and Analyse Spherical, HEALPix and Cosmic Microwave Background data on a HEALPix grid. | ||||||||||
Uw Astr598 W18 | 13 | 5 years ago | bsd-2-clause | Jupyter Notebook | ||||||
ASTR 598: Astro-statistics and Machine Learning | ||||||||||
Popsynth | 13 | 1 | 9 months ago | 27 | June 13, 2022 | gpl-3.0 | Python | |||
A generic flux/parameter population synthesis code |
Installation Guide | readthedocs | Introduction on Binder | HowToFit
PyAutoFit is a Python based probabilistic programming language for the fully Bayesian analysis of extremely large datasets which:
PyAutoFit supports advanced statistical methods such as graphical and hierarchical models, model-fit chaining, sensitivity mapping and massively parallel model-fits .
The following links are useful for new starters:
PyAutoFit began as an Astronomy project for fitting large imaging datasets of galaxies after the developers found that existing PPLs (e.g., PyMC3, Pyro, STAN) were not suited to the model fitting problems many Astronomers faced. This includes:
If these challenges sound familiar, then PyAutoFit may be the right software for your model-fitting needs!
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:
We define our model, a 1D Gaussian by writing a Python class using the format below:
class Gaussian:
def __init__(
self,
centre=0.0, # <- PyAutoFit recognises these
normalization=0.1, # <- constructor arguments are
sigma=0.01, # <- the Gaussian's parameters.
):
self.centre = centre
self.normalization = normalization
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 model_data_1d_via_xvalues_from(self, xvalues):
transformed_xvalues = xvalues - self.centre
return (self.normalization / (self.sigma * (2.0 * np.pi) ** 0.5)) * \
np.exp(-0.5 * (transformed_xvalues / self.sigma) ** 2.0)
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.
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:
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("normalization = ", instance.normalization)
print("Sigma = ", instance.sigma)
"""
We fit the ``data`` with the Gaussian instance, using its
"model_data_1d_via_xvalues_from" function to create the model data.
"""
xvalues = np.arange(self.data.shape[0])
model_data = instance.model_data_1d_via_xvalues_from(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 non-linear search:
model = af.Model(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.
Support for installation issues, help with Fit modeling and using PyAutoFit is available by raising an issue on the GitHub issues page.
We also offer support on the PyAutoFit Slack channel, where we also provide the latest updates on PyAutoFit. Slack is invitation-only, so if you'd like to join send an email requesting an invite.