Skip to content

Fit gaussian mixtures using truncated gaussian kernels.Python wrapper around the julia package TruncatedGaussianMixtures.jl

Notifications You must be signed in to change notification settings

Potatoasad/truncatedgaussianmixtures

Repository files navigation

Truncated Guassian Mixtures

DOI PyPI version Documentation

Fit data to mixtures of truncated multivariate gaussians

$$p(x) = \sum_k w_k\ \phi_{[{\bf a}, {\bf b}]}({\bf x} | \boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k)$$

where ${\bf a}$ and ${\bf b}$ are the bounding corners of the hypercube we would like to truncate the gaussian in. This package supports

  • Full, Diagonal and Block diagonal covariances for each component
  • Inteface to allow one to perform the fit in some latent space given by a user-defined transformation, and carry along any target labels
  • Sampling and pdf evaluation from the resultant fit

Quick Start

You can install this library using

pip install truncatedgaussianmixtures

You can then import truncatedgaussianmixtures. At the first import it may take a while, since this will create a local julia installation. This will only happen once at the first ever import.

The main function to use is fit_gmm. The following is a simple example use case.

   import pandas as pd
   from truncatedgaussianmixtures import fit_gmm

   # Generate some data
   df = pd.DataFrame(np.random.randn(80_000, 2), columns=["x", "y"])
   
   # Truncated it to the unit square
   cond = (df['x'] < 1) & (df['x'] > 0)  
   cond &= (df['y'] < 1) & (df['y'] > 0)
   df = df[cond]

   # Fit it a truncated gaussian mixture model to it
   gmm = fit_gmm(data = df,      # data to fit to
                 N    = 1,       # Number of components of the mixture model
                 a    = [0,0],   # lower corner of the truncation
                 b    = [1,1],   # upper corner of the truncation
                 cov  = "diag"   # covariance structure: any of ("diag", "full")
          )

   # Sample from the gmm
   df_fit = gmm.sample(len(df));

   # Evaluate it at different points
   gmm.pdf(np.array([0,0]))

About

Fit gaussian mixtures using truncated gaussian kernels.Python wrapper around the julia package TruncatedGaussianMixtures.jl

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages