[−][src]Struct linfa_clustering::Dbscan
DBSCAN (Density-based Spatial Clustering of Applications with Noise)
clusters together points which are close together with enough neighbors
labelled points which are sparsely neighbored as noise. As points may be
part of a cluster or noise the predict method returns
Array1<Option<usize>>
As it groups together points in dense regions the number of clusters is determined by the dataset and distance tolerance not the user.
We provide an implemention of the standard O(N^2) query-based algorithm of which more details can be found in the next section or here.
The standard DBSCAN algorithm isn't iterative and therefore there's no fit method provided only predict.
The algorithm
The algorithm iterates over each point in the dataset and for every point not yet assigned to a cluster:
- Find all points within the neighborhood of size
tolerance
- If the number of points in the neighborhood is below a minimum size label as noise
- Otherwise label the point with the cluster ID and repeat with each of the neighbours
Tutorial
Let's do a walkthrough of an example running DBSCAN on some data.
use linfa::traits::Transformer; use linfa_clustering::{DbscanHyperParams, Dbscan, generate_blobs}; use ndarray::{Axis, array, s}; use ndarray_rand::rand::SeedableRng; use rand_isaac::Isaac64Rng; use approx::assert_abs_diff_eq; // Our random number generator, seeded for reproducibility let seed = 42; let mut rng = Isaac64Rng::seed_from_u64(seed); // `expected_centroids` has shape `(n_centroids, n_features)` // i.e. three points in the 2-dimensional plane let expected_centroids = array![[0., 1.], [-10., 20.], [-1., 10.]]; // Let's generate a synthetic dataset: three blobs of observations // (100 points each) centered around our `expected_centroids` let observations = generate_blobs(100, &expected_centroids, &mut rng); // Let's configure and run our DBSCAN algorithm // We use the builder pattern to specify the hyperparameters // `min_points` is the only mandatory parameter. // If you don't specify the others (e.g. `tolerance`) // default values will be used. let min_points = 3; let clusters = Dbscan::params(min_points) .tolerance(1e-2) .build() .transform(&observations); // Points are `None` if noise `Some(id)` if belonging to a cluster.
Implementations
impl Dbscan
[src]
pub fn params(min_points: usize) -> DbscanHyperParamsBuilder
[src]
Trait Implementations
impl Clone for Dbscan
[src]
impl Debug for Dbscan
[src]
impl PartialEq<Dbscan> for Dbscan
[src]
pub fn eq(&self, other: &Dbscan) -> bool
[src]
#[must_use]pub fn ne(&self, other: &Rhs) -> bool
1.0.0[src]
impl StructuralPartialEq for Dbscan
[src]
Auto Trait Implementations
impl RefUnwindSafe for Dbscan
impl Send for Dbscan
impl Sync for Dbscan
impl Unpin for Dbscan
impl UnwindSafe for Dbscan
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> Pointable for T
pub const ALIGN: usize
type Init = T
The type for initializers.
pub unsafe fn init(init: <T as Pointable>::Init) -> usize
pub unsafe fn deref<'a>(ptr: usize) -> &'a T
pub unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T
pub unsafe fn drop(ptr: usize)
impl<SS, SP> SupersetOf<SS> for SP where
SS: SubsetOf<SP>,
SS: SubsetOf<SP>,
pub fn to_subset(&self) -> Option<SS>
pub fn is_in_subset(&self) -> bool
pub unsafe fn to_subset_unchecked(&self) -> SS
pub fn from_subset(element: &SS) -> SP
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
pub fn to_owned(&self) -> T
[src]
pub fn clone_into(&self, target: &mut T)
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
V: MultiLane<T>,