Skip to main content

A performant 3rd party implementation of the Denmune Clustering algorithm

Project description

DenMune-Sklearn: A Robust Implementation of the DenMune Clustering Algorithm

Ruff Code Style: Black

Unit Tests codecov CodeQL Advanced Documentation Dependabot Updates

PyPI version

License: BSD 3-Clause

An efficient, scikit-learn compatible implementation of the "DENMUNE: Density peak based clustering using mutual nearest neighbors" algorithm.

Disclaimer: This project is a clean-room rewrite of the DenMune algorithm. It is not derived from the original authors' code and makes significant implementation choices to improve performance and scikit-learn compatibility. It is not a strictly faithful reproduction of the paper's original pseudocode but adheres to its core principles.


Why DenMune-Sklearn?

The original DenMune paper presents a powerful algorithm for finding clusters of arbitrary shapes and densities. However, existing third-party implementations suffer from critical issues, including a lack of scikit-learn compatibility, data leakage bugs, and severe performance bottlenecks.

This project was created to provide a version of DenMune that is:

  • Scikit-Learn Native: Fully compatible with the scikit-learn ecosystem (Pipeline, GridSearchCV, etc.).
  • Correct & Robust: Fixes fundamental algorithmic flaws like data leakage and provides robust error handling.
  • Performant: Replaces slow Python loops with optimized, vectorized NumPy operations and a sparse graph representation.

Key Features

  • Finds Complex Clusters: Excels at identifying non-convex clusters of varying densities.
  • Automatic Noise Detection: Automatically identifies and labels noise points.
  • Single Parameter Tuning: Requires only one primary parameter, k_nearest, for straightforward tuning.
  • Efficient Implementation: Uses a sparse csr_matrix for k-NN graph representation and a Union-Find data structure for fast cluster merging.
  • Flexible Dimensionality Reduction: Integrates with scikit-learn's TSNE and PCA, and allows for any user-provided reducer (e.g., UMAP).

Installation

pip install denmune-skl

Quick Usage

from sklearn.datasets import make_moons
from sklearn.preprocessing import StandardScaler
from denmune_skl import DenMune
import matplotlib.pyplot as plt
import numpy as np

# 1. Generate and prepare data
X, y = make_moons(n_samples=250, noise=0.07, random_state=42)
X = StandardScaler().fit_transform(X)

# 2. Fit the model
model = DenMune(k_nearest=20, random_state=42)
model.fit(X)

# 3. Visualize the results
labels = model.labels_
n_clusters = model.n_clusters_

print(f"Estimated number of clusters: {n_clusters}")

plt.scatter(X[:, 0], X[:, 1], c=labels, s=50, cmap='viridis')
plt.title(f"DenMune Clustering (k={model.k_nearest})\nEstimated clusters: {n_clusters}")
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.show()

Reference

This algorithm is based on the following paper:

@article{Abbas2021DenMune,
  title   = {{DENMUNE}: {Density} peak based clustering using mutual nearest neighbors},
  author  = {Abbas, Mohamed and El-Zoghabi, Adel and Shoukry, Amin},
  journal = {Pattern Recognition},
  volume  = {112},
  pages   = {107718},
  year    = {2021},
  doi     = {10.1016/j.patcog.2020.107718}
}

License

This project is licensed under the BSD 3-Clause License.

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

denmune_skl-0.1.1.tar.gz (110.2 kB view details)

Uploaded Source

Built Distribution

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

denmune_skl-0.1.1-py3-none-any.whl (17.6 kB view details)

Uploaded Python 3

File details

Details for the file denmune_skl-0.1.1.tar.gz.

File metadata

  • Download URL: denmune_skl-0.1.1.tar.gz
  • Upload date:
  • Size: 110.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.8

File hashes

Hashes for denmune_skl-0.1.1.tar.gz
Algorithm Hash digest
SHA256 184a464d1625fd6cf28032624804675f96dd1187e4f8dae4dfa3aaaadb47b1f8
MD5 f644efcd93a0296811c341456eb473ee
BLAKE2b-256 14b18b63dd77ba42dde702f54b82f4290e03e159bd189f0284c25d77b98a4643

See more details on using hashes here.

File details

Details for the file denmune_skl-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: denmune_skl-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 17.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.8

File hashes

Hashes for denmune_skl-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 21b712a3de4df46d187d131db80fa084988c3d264024597ec1568f248f6cbb52
MD5 40b63ad55a34d9a031f67f86a9caa8c2
BLAKE2b-256 b17c01a760b910f8af690963ba7de419baab13a1cf0b55706b59e63c855a4cfc

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