WeightedKMeans

Struct WeightedKMeans 

Source
pub struct WeightedKMeans { /* private fields */ }
Expand description

A weighted clustering-problem where each center can be any point in the metric space.

Use KMeans instead if all your points have the same weight.

The metric space is the same space the weighted points live in.

The cost of a cluster, given a center, is the sum of the squared Euclidean distances between the center and each point in the cluster, multiplied by the point’s weight. The center is automatically calculated to minimise the cost, which turns out to simply be the weighted average of all point-positions in the cluster.

See the wikipedia-article on k-means-clustering for more information.

Implementations§

Source§

impl WeightedKMeans

Source

pub fn new(weighted_points: &[WeightedPoint]) -> Result<Self, Error>

Construct a new k-means clustering instance.

The algorithm runs significantly faster if you sort the points by weight first, merge points that have the same positions into one (adding their weights), and break symmetries by applying a small amount of noise.

TODO: Do so internally instead of at callsite. This probably requires better return-values in the API. Afterwards, rework the get_high_kmeans_price_of_greedy_instance function in integration-tests to not sort the points on its own.

§Examples
use ndarray::array;
use exact_clustering::WeightedKMeans;

WeightedKMeans::new(&[(1.0, array![0.0, 0.0]), (2.0, array![1.0, 2.0])]).unwrap();

Trait Implementations§

Source§

impl Clone for WeightedKMeans

Source§

fn clone(&self) -> WeightedKMeans

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 Cost for WeightedKMeans

Source§

fn num_points(&self) -> usize

Get the number of points that must be clustered. Read more
Source§

fn cost(&mut self, cluster: Cluster) -> f64

Get the cost of a cluster. Read more
Source§

fn total_cost(&mut self, clustering: &Clustering) -> f64

Get the total cost of a clustering.
Source§

fn approximate_clusterings(&mut self) -> Vec<(f64, Clustering)>

Quickly calculate a not-necessarily-optimal clustering. Read more
Source§

fn optimal_clusterings(&mut self) -> Vec<(f64, Clustering)>

Calculate an optimal k-clustering for every 0 ≤ k ≤ self.num_points(). Read more
Source§

fn price_of_hierarchy(&mut self) -> (f64, Vec<Clustering>)

Calculate the price-of-hierarchy of the clustering-problem, together with an optimal hierarchy. Read more
Source§

fn greedy_hierarchy(&mut self) -> Vec<(f64, Clustering)>

Calculate a greedy hierarchical clustering. Read more
Source§

fn price_of_greedy(&mut self) -> (f64, Vec<Clustering>)

Calculate the cost-ratio of a greedy hierarchical clustering. Read more
Source§

impl Debug for WeightedKMeans

Source§

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

Formats the value using the given formatter. Read more

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
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> 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.
Source§

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

Source§

fn vzip(self) -> V