anofox_ml_cluster/lib.rs
1//! Clustering algorithms: K-Means and DBSCAN.
2//!
3//! This crate provides unsupervised clustering methods for grouping data points:
4//!
5//! - [`KMeans`] -- Lloyd's algorithm with k-means++ initialization.
6//! - [`Dbscan`] -- density-based spatial clustering of applications with noise.
7//!
8//! Both implement [`FitUnsupervised`](anofox_ml_core::FitUnsupervised) and
9//! [`Predict`](anofox_ml_core::Predict), so the fitted model can assign cluster
10//! labels to new data points.
11//!
12//! # Examples
13//!
14//! ```
15//! use ndarray::array;
16//! use anofox_ml_core::{FitUnsupervised, Predict};
17//! use anofox_ml_cluster::KMeans;
18//!
19//! let x = array![
20//! [0.0, 0.0],
21//! [1.0, 0.0],
22//! [0.0, 1.0],
23//! [10.0, 10.0],
24//! [11.0, 10.0],
25//! [10.0, 11.0]
26//! ];
27//!
28//! let kmeans = KMeans::new(2).with_seed(42);
29//! let fitted = FitUnsupervised::<f64>::fit(&kmeans, &x).unwrap();
30//!
31//! // Points in the same group get the same label
32//! let labels = fitted.labels();
33//! assert_eq!(labels[0] as usize, labels[1] as usize);
34//! assert_eq!(labels[3] as usize, labels[4] as usize);
35//! assert_ne!(labels[0] as usize, labels[3] as usize);
36//! ```
37
38pub mod affinity_propagation;
39pub mod agglomerative;
40pub mod bgmm;
41pub mod birch;
42pub mod dbscan;
43pub mod gmm;
44pub mod hdbscan;
45pub mod kmeans;
46pub mod mean_shift;
47pub mod mini_batch_kmeans;
48pub mod optics;
49pub mod spectral;
50
51pub use affinity_propagation::{AffinityPropagation, FittedAffinityPropagation};
52pub use agglomerative::{AgglomerativeClustering, FittedAgglomerativeClustering, Linkage};
53pub use bgmm::{BayesianGaussianMixture, FittedBayesianGaussianMixture};
54pub use birch::{Birch, FittedBirch};
55pub use dbscan::{Dbscan, FittedDbscan};
56pub use gmm::{CovarianceType, FittedGaussianMixture, GaussianMixture};
57pub use hdbscan::{FittedHdbscan, Hdbscan};
58pub use kmeans::{FittedKMeans, KMeans};
59pub use mean_shift::{FittedMeanShift, MeanShift};
60pub use mini_batch_kmeans::{FittedMiniBatchKMeans, MiniBatchKMeans};
61pub use optics::{FittedOptics, Optics};
62pub use spectral::{Affinity, FittedSpectralClustering, SpectralClustering};