Skip to main content

Fast k-means++ seeding algorithms with C++ implementation and Python bindings

Project description

kmeans-seeding: Fast k-means++ Initialization Algorithms

PyPI version Python versions License Documentation

Fast, state-of-the-art k-means initialization algorithms implemented in C++ with Python bindings.

Features

🚀 Fast: C++ implementation with OpenMP parallelization 🎯 Accurate: State-of-the-art algorithms with theoretical guarantees 🔌 Compatible: Drop-in replacement for sklearn's k-means++ initialization 📦 Easy to use: Simple Python API, works with NumPy arrays 🛠️ Flexible: Multiple algorithms to choose from

Algorithms Included

  1. RS-k-means++ (Rejection Sampling) - Our contribution

    • Fast approximate D² sampling using rejection sampling
    • Supports FAISS for approximate nearest neighbors
    • Best for large datasets (n > 10,000)
  2. AFK-MC² (Adaptive Fast k-MC²)

    • MCMC-based sampling without computing all distances
    • Good balance of speed and quality
  3. Fast-LSH k-means++ (Google 2020)

    • Tree embedding with LSH for fast sampling
    • Excellent for high-dimensional data
  4. Standard k-means++

    • Classic D² sampling algorithm
    • Baseline for comparison

Installation

From PyPI (recommended)

pip install kmeans-seeding

With FAISS support (recommended for large datasets)

# CPU version
conda install -c pytorch faiss-cpu
pip install kmeans-seeding

# GPU version
conda install -c pytorch faiss-gpu
pip install kmeans-seeding

From source

git clone https://github.com/pcshah2004/kmeans-seeding.git
cd kmeans-seeding
pip install -e .

Quick Start

from kmeans_seeding import rejection_sampling
from sklearn.cluster import KMeans
import numpy as np

# Generate sample data
X = np.random.randn(10000, 50)

# Get initial centers using RS-k-means++
centers = rejection_sampling(X, n_clusters=100, index_type='LSH')

# Use with sklearn
kmeans = KMeans(n_clusters=100, init=centers, n_init=1)
kmeans.fit(X)

Usage Examples

RS-k-means++ (Rejection Sampling)

from kmeans_seeding import rejection_sampling

centers = rejection_sampling(
    X,
    n_clusters=100,
    max_iter=50,           # Max rejection sampling iterations
    index_type='LSH',      # FAISS index type: 'Flat', 'LSH', 'IVFFlat', 'HNSW'
    random_state=42
)

AFK-MC² (MCMC Sampling)

from kmeans_seeding import afkmc2

centers = afkmc2(
    X,
    n_clusters=100,
    chain_length=200,      # Markov chain length
    random_state=42
)

Fast-LSH k-means++

from kmeans_seeding import fast_lsh

centers = fast_lsh(
    X,
    n_clusters=100,
    n_trees=4,             # Number of trees for embedding
    random_state=42
)

Standard k-means++

from kmeans_seeding import kmeanspp

centers = kmeanspp(X, n_clusters=100, random_state=42)

Benchmarks

Performance comparison on various datasets:

Dataset n d Algorithm Time (s) Cost Ratio*
MNIST 60K 784 k-means++ 45.2 1.00
RS-k-means++ (LSH) 2.1 1.02
AFK-MC² 8.3 1.05
CIFAR-10 50K 512 k-means++ 38.7 1.00
RS-k-means++ (LSH) 1.8 1.01
AFK-MC² 6.9 1.04

*Cost ratio: Final k-means cost compared to standard k-means++

Documentation

Full documentation available at: https://kmeans-seeding.readthedocs.io

Requirements

  • Python 3.9+
  • NumPy >= 1.20.0
  • (Optional) FAISS >= 1.7.0 for fast approximate nearest neighbors
  • (Optional) scikit-learn for full k-means clustering

Citation

If you use this library in your research, please cite:

@article{shah2025rejection,
  title={A New Rejection Sampling Approach to k-means++ With Improved Trade-Offs},
  author={Shah, Poojan and Agrawal, Shashwat and Jaiswal, Ragesh},
  journal={arXiv preprint arXiv:2502.02085},
  year={2025}
}

For AFK-MC²:

@inproceedings{bachem2016approximate,
  title={Approximate k-means++ in sublinear time},
  author={Bachem, Olivier and Lucic, Mario and Hassani, Hamed and Krause, Andreas},
  booktitle={AAAI Conference on Artificial Intelligence},
  year={2016}
}

For Fast-LSH k-means++:

@inproceedings{cohen2020fast,
  title={Fast and accurate k-means++ via rejection sampling},
  author={Cohen-Addad, Vincent and Lattanzi, Silvio and Mitrovi{\'c}, Slobodan and Norouzi-Fard, Ashkan and Parotsidis, Nikos and Tarnawski, Jakub},
  booktitle={Advances in Neural Information Processing Systems},
  year={2020}
}

Contributing

Contributions are welcome! Please see CONTRIBUTING.md for guidelines.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

  • FAISS library by Facebook AI Research
  • scikit-learn for the k-means clustering API design
  • Research supported by the Department of Computer Science, IIT Delhi

Contact

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kmeans_seeding-0.2.0.tar.gz (44.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

kmeans_seeding-0.2.0-cp313-cp313-macosx_14_0_arm64.whl (138.2 kB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

File details

Details for the file kmeans_seeding-0.2.0.tar.gz.

File metadata

  • Download URL: kmeans_seeding-0.2.0.tar.gz
  • Upload date:
  • Size: 44.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for kmeans_seeding-0.2.0.tar.gz
Algorithm Hash digest
SHA256 1bceb907dc5d395c601911736c760dce26d3f4640e73416d4dfda6bb57284930
MD5 58eecaf0937741f8db01236108664a43
BLAKE2b-256 7f727be093e70c0035d0eddd70a77eaf70c597550c8275193f237817bceca373

See more details on using hashes here.

File details

Details for the file kmeans_seeding-0.2.0-cp313-cp313-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for kmeans_seeding-0.2.0-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 d0964aa7ab38aa08a7a1ab55f76a456e788f5d0298ac617876d7f6ecc64dc48d
MD5 178de5ce3502aa048380616f6d06f446
BLAKE2b-256 18aab666ddcea1a78d2174b885b26ae0ad8ffdb00ac70f643738f097d8be04bc

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page