Skip to main content

KMeansAlgorithm

Enum KMeansAlgorithm 

Source
#[non_exhaustive]
pub enum KMeansAlgorithm { Lloyd, Hamerly, }
Expand description

Specifies the algorithm used for the KMeans assignment step.

Both variants minimise the same objective and, given identical initial centroids, converge to the same result. They only differ in how the assignment step is computed. Select a variant via KMeansParams::algorithm.

This setting only applies to batch fit. The incremental Mini-Batch K-means path (fit_with) always uses Lloyd’s update, and configuring Hamerly alongside fit_with is rejected with KMeansParamsError::IncrementalHamerly.

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

Lloyd

Standard Lloyd’s algorithm (also known as the “naive” algorithm).

On every iteration, computes the distance from each observation to every centroid to determine the closest one. Simple and predictable; work per iteration is O(n_observations * n_clusters * n_features).

Default variant. Works with any Distance.

§

Hamerly

Hamerly’s accelerated algorithm.

Uses the triangle inequality together with per-observation upper/lower distance bounds to skip most distance computations once the algorithm has stabilised. Produces the same result as Lloyd’s algorithm given the same initial centroids, and is typically substantially faster for well-separated clusters with a moderate number of centroids. For heavily overlapping clusters or very large n_clusters the bookkeeping overhead can make Lloyd a better choice.

Because the bounds rely on the triangle inequality, the supplied distance function must be a true metric. L2Dist, L1Dist and LInfDist satisfy this.

Only supported in batch fit; not available for Mini-Batch fit_with.

Reference: https://cs.baylor.edu/~hamerly/papers/sdm_2010.pdf

Trait Implementations§

Source§

impl Clone for KMeansAlgorithm

Source§

fn clone(&self) -> KMeansAlgorithm

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for KMeansAlgorithm

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for KMeansAlgorithm

Source§

fn eq(&self, other: &KMeansAlgorithm) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for KMeansAlgorithm

Source§

impl Eq for KMeansAlgorithm

Source§

impl StructuralPartialEq for KMeansAlgorithm

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<B> Stagewise for B

§

fn chain_shrunk<C, F>( self, corrector: Shrunk<C, F>, ) -> ResidualChainParams<B, C, F>
where F: Float,

Compose self (as the base model) with a [Shrunk]-wrapped corrector, which will be trained on the residuals left by self. Further stages can be appended by calling .chain(...) or .chain_shrunk(...) on the returned [ResidualChainParams]. Read more
§

fn chain<C, F, E>(self, corrector: C) -> ResidualChainParams<B, C, F>
where F: Float, C: Fit<ArrayBase<OwnedRepr<F>, Dim<[usize; 2]>>, ArrayBase<OwnedRepr<F>, Dim<[usize; 1]>>, E>, E: Error + From<Error>,

Compose self (as the base model) with corrector, which will be trained on the residuals left by self. The corrector is used without shrinkage (equivalent to shrink_by(1.0)). Further stages can be appended by calling .chain(...) or .chain_shrunk(...) on the returned [ResidualChainParams]. Read more
§

fn shrink_by<F, E>(self, shrinkage: F) -> Shrunk<B, F>
where F: Float, B: Fit<ArrayBase<OwnedRepr<F>, Dim<[usize; 2]>>, ArrayBase<OwnedRepr<F>, Dim<[usize; 1]>>, E>, E: Error + From<Error>,

Wrap self in a [Shrunk] with learning rate shrinkage ∈ (0, 1], making it ready to pass as the corrector argument to [Stagewise::chain_shrunk]. Read more
§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
§

unsafe fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V