Skip to main content

tgmm: Gaussian Mixture Models in PyTorch

PyPI version Documentation Python 3.8+ PyTorch

tgmm Logo

tgmm is a flexible, GPU-accelerated implementation of Gaussian Mixture Models (GMM) in PyTorch, supporting EM and MAP estimation, multiple covariance types, several initialization strategies, and a comprehensive suite of clustering metrics and visualization tools.

Installation

Install the latest stable version from PyPI:

pip install tgmm

For development installation:

git clone https://github.com/adriansousapoza/tgmm.git
cd tgmm
pip install -e .

Requirements: Python 3.8+ and PyTorch 2.5+. For GPU usage, install the CUDA-enabled version of PyTorch as per the official instructions.

Documentation

Full documentation is hosted at adriansousapoza.github.io/tgmm:

Quick Start

import torch
import numpy as np
from tgmm import GaussianMixture

# Generate sample data
np.random.seed(42)
X = np.vstack([
    np.random.multivariate_normal([0, 0], [[1, 0.5], [0.5, 1]], 300),
    np.random.multivariate_normal([3, 3], [[1, -0.3], [-0.3, 1]], 300),
    np.random.multivariate_normal([-2, 2], [[0.5, 0], [0, 2]], 200)
])
X_tensor = torch.tensor(X, dtype=torch.float32)

# Create and fit GMM
gmm = GaussianMixture(n_components=3, random_state=42)
gmm.fit(X_tensor)

# Make predictions
labels = gmm.predict(X_tensor)
print(f"Converged: {gmm.converged_}, Iterations: {gmm.n_iter_}")

See the Tutorials for runnable, end-to-end examples of every feature -- covariance types, all initialization strategies, MAP estimation with priors, Classification EM, constrained sampling, save/load, and more.

Key Features

1. Gaussian Mixture Model

The core GaussianMixture class supports:

  • Covariance Types: 'full', 'diag', 'spherical', 'tied_full', 'tied_diag', 'tied_spherical', or any of the 14 Celeux & Govaert GPCM models via their mclust codes ('VEI', 'EVI', 'VEE', 'EVE', 'EEV', 'VVE', 'VEV', 'EVV', plus mclust aliases for the 6 above)
  • Estimation Methods: MLE (Maximum Likelihood) or MAP (Maximum A Posteriori) with priors
  • Algorithms: algorithm='em' (standard), 'cem' (Classification EM), 'sem' (Stochastic EM), or 'saem' (Stochastic Approximation EM); temperature for deterministic annealing EM on top of any of those
  • Scalable fitting: optional batch_size chunks the E-step and sufficient-statistics accumulation over rows, bounding peak memory on large datasets; step_size switches to mini-batch/online EM (plus partial_fit for streaming); optional Aitken-accelerated stopping rule via convergence='aitken'
  • Initialization: Multiple strategies via GMMInitializer
  • Model Selection: bic/aic/icl methods for comparing fits at different n_components, or sweep a grid automatically with select_model

2. Bayesian Inference with Priors

Support for conjugate priors enables proper Bayesian inference:

  • Weight Prior: Dirichlet distribution
  • Mean Prior: Gaussian distribution
  • Covariance Prior: Wishart/Inverse-Wishart distribution
  • NIW Conjugate Prior: Normal-Inverse-Wishart for joint mean-covariance updates

3. Clustering Metrics

Comprehensive evaluation with ClusteringMetrics:

Unsupervised Metrics (no ground truth needed; metric, noise_label, and optional n_components shared across all of them):

  • Silhouette Score, Davies-Bouldin Index, Calinski-Harabasz Index, Dunn Index
  • WB-Index, Wemmert-Gancarski Index, DBCV -- top performers in the Simpson, Campello & Stojanovski (2025) clustering-validity benchmark (BIC/AIC/ICL are bic/aic/icl methods on GaussianMixture directly -- including GaussianMixture(n_components=None, ...) -- not ClusteringMetrics)

Supervised Metrics (with ground truth labels):

  • Adjusted Rand Index (ARI), Normalized/Adjusted Mutual Information, Purity
  • Homogeneity, Completeness, V-Measure (weighted via beta), Normalized Information Distance
  • Confusion Matrix and per-class Classification Report (precision, recall, F1, ROC-AUC)

4. Visualization Tools

Flexible plotting utilities in tgmm.plotting:

  • Component ellipses at multiple confidence levels
  • Cluster coloring, ground-truth comparison, and log-likelihood coloring
  • Initial vs. final mean trajectories and weight-scaled markers

5. Other Mixture Families

StudentTMixture and VonMisesFisherMixture share GaussianMixture's entire EM toolkit (algorithm, temperature, step_size, n_init, bic/aic/icl, ...) via a common BaseMixture base class:

  • StudentTMixture: a robust alternative to GaussianMixture (Peel & McLachlan, 2000) -- heavier-tailed components that downweight outliers instead of letting them drag the fit. sample_weights(X) flags which points were treated as outliers.
  • VonMisesFisherMixture: for L2-normalized / cosine-similarity data (text and image embeddings, typically) -- components are directions on the unit hypersphere with a concentration parameter, fit per Banerjee, Dhillon, Ghosh & Sra (2005).

See the Other Mixture Families guide.

6. Semi-Supervised and Positive-Unlabeled Fitting

Every mixture family supports fit(X, labels=...) with -1 for unknown rows -- fully labeled runs a single closed-form fit (optionally with components_per_class for a multi-component class); any -1 present runs semi-supervised EM (unlabeled_weight, label_confidence). predict_class(X) returns class labels, as opposed to predict(X)'s raw component indices.

PositiveUnlabeledMixture wraps this for positive-unlabeled (PU) learning (Elkan & Noto, 2008): a labeled positive subset, everything else unlabeled. Estimates the class prior and a per-row positive probability under the SCAR assumption, for family in ('gaussian', 'student_t', 'vmf'), with anchor in ('fixed', 'prior', 'free') controlling identifiability.

See the Semi-Supervised and Positive-Unlabeled Fitting guide.

Citation

TBA

License

Released under the MIT License. © 2025, Adrián A. Sousa-Poza

Contributing

tgmm isn't yet set up to accept external contributions. If you're interested in contributing, please reach out to asp@di.ku.dk.

Metadata

Release files for tgmm 0.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tgmm 0.4.0
File Size Uploaded
tgmm-0.4.0.tar.gz 165.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for tgmm 0.4.0
File Interpreter ABI Platform
tgmm-0.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 288.8 kB

Release files / tgmm-0.4.0.tar.gz

Download URL tgmm-0.4.0.tar.gz
Size 165.6 kB
Tags Source
SHA-256 checksum
How to use checksums
914583e3bfbed6765c8a8179c8990bf07a5d337ca2131e1f6faa5fe6f082761b
BLAKE2b-256 checksum
How to use checksums
5e47a6f74d55fcb1e80b89d607a85a7b5bf4c54cae263a7654acdf0dc2d021ec
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.8

Release files / tgmm-0.4.0-py3-none-any.whl

Download URL tgmm-0.4.0-py3-none-any.whl
Size 123.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
06cfa9c641335bf8d8cd5f81f4d47c6a565024e498dc294769ec3ecd462f1ec1
BLAKE2b-256 checksum
How to use checksums
3eb5a51d6d80a5aab1af1612877191c3c26116ea64e95fe1b3acc81b6215980d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.8

Release history Release notifications | RSS feed

This release

0.4.0 This release

2 release files

0.3.0

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.7

2 release files

0.1.5

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page