This repository contains helpful functions for computing conditional distributions of multivariate normal distributions and Gaussian mixture models (GMMs). It is able to return not only the conditional means (expectation values) but also the conditional covariances and conditional component weights (probabilities).
Note that this package is NOT intended for use in training GMMs. There are much better tools out there for this purpose such as those in scikit-learn
.
Clone the repository
git clone https://github.com/tmcclintock/ConditionalGMM
install:
pip install -r pyproject.toml --all-extras
PyPI distro coming soon.
Suppose you had some data described by some number of Gaussians:
Once you have a GMM describing the data (the lines) you can create a conditional GMM object:
import ConditionalGMM
cGMM = ConditionalGMM.CondGMM(weights, means, covs, fixed_indices)
where fixed_indices
is an array of the dimensions that you will take conditionals on. In this example, we will look at y
conditional on x
, so we would have fixed_indices = [0]
.
Given some observations of x
with this package you can quickly compute conditional probability distributions:
y = np.linspace(-12, 0, 200)
x_obs = np.array([-1, 4, 7])
for x in x_obs:
y_cpdf = np.array([cGMM.conditional_pdf([yi], x) for yi in y])
This package also lets you draw random values (RVs) from the conditional PDF. For instance, here are one hundred thousand draws from each of the conditional PDFs shown above:
x_obs = np.array([-1, 4, 7])
N = 100000
for x in x_obs:
y_rvs = cGMM.rvs(x, size=N)