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.2.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.2-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.2.tar.gz.

File metadata

  • Download URL: kmeans_seeding-0.2.2.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.2.tar.gz
Algorithm Hash digest
SHA256 0d7a8a8d62926d4b1afa2ce95d3eb934a69e925d6535148daa477f553d9976c1
MD5 54dafd37474e0aaad1a963cad70a9cec
BLAKE2b-256 db8336b28686ae3ab895296106aac653fb87a53ccf9c1adb59be82799ed82ed2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for kmeans_seeding-0.2.2-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 160176bf179f51bc8bb2595706623870f1c9f2cc23ebfdc113bb784fbd963ab7
MD5 a7e4ecd8e0d8d1c7313d6556a4cac387
BLAKE2b-256 eae293b54593d7bed3f2d336f1573d4d4fd553865f2126028b506f226642adbd

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