pub struct KnnLabPropGraph<T> {
pub offsets: Vec<usize>,
pub neighbours: Vec<usize>,
pub weights: Vec<T>,
}Expand description
Structure to store KNN graphs and do label propagation
Fields§
§offsets: Vec<usize>Stores the offsets for node i’s neighbours
neighbours: Vec<usize>Flat array with neighbour indices
weights: Vec<T>Normalised edge weights
Implementations§
Source§impl<T> KnnLabPropGraph<T>where
T: BixverseFloat,
impl<T> KnnLabPropGraph<T>where
T: BixverseFloat,
Sourcepub fn from_edge_list(edges: &[usize], n_nodes: usize, symmetrise: bool) -> Self
pub fn from_edge_list(edges: &[usize], n_nodes: usize, symmetrise: bool) -> Self
Generate the KnnLabelPropGraph
§Params
edges- edge list in form of [node_1, node_2, node_3, …] which indicates alternating pairs (node_1, node_2), etc in terms of edges.n_nodes- Number of nodes in the graphsymmetrise- Shall the graph be made symmetric.
§Returns
Self with the data stored in the structure.
Sourcepub fn from_node_pairs(
from: &[usize],
to: &[usize],
n_nodes: usize,
symmetrise: bool,
) -> Self
pub fn from_node_pairs( from: &[usize], to: &[usize], n_nodes: usize, symmetrise: bool, ) -> Self
Sourcepub fn from_weighted_node_pairs(
from: &[usize],
to: &[usize],
weights: &[T],
n_nodes: usize,
symmetrise: Option<SymmetryWeightStrategy>,
) -> Self
pub fn from_weighted_node_pairs( from: &[usize], to: &[usize], weights: &[T], n_nodes: usize, symmetrise: Option<SymmetryWeightStrategy>, ) -> Self
Sourcepub fn from_weighted_edge_list(
edges: &[usize],
weights: &[T],
n_nodes: usize,
symmetrise: Option<SymmetryWeightStrategy>,
) -> Self
pub fn from_weighted_edge_list( edges: &[usize], weights: &[T], n_nodes: usize, symmetrise: Option<SymmetryWeightStrategy>, ) -> Self
Generate the KnnLabelPropGraph with weights
§Params
edges- edge list in form of [node_1, node_2, node_3, …] which indicates alternating pairs (node_1, node_2), etc in terms of edges.weights- the weights between the two nodes in the graph.n_nodes- Number of nodes in the graphsymmetrise- Which symmetry strategy to use. If None, no symmetrisation is performed.
§Returns
Self with the data stored in the structure.
Sourcepub fn label_spreading(
&self,
labels: &[Vec<T>],
mask: &[bool],
alpha: T,
iterations: usize,
tolerance: T,
max_hops: Option<usize>,
) -> Vec<Vec<T>>
pub fn label_spreading( &self, labels: &[Vec<T>], mask: &[bool], alpha: T, iterations: usize, tolerance: T, max_hops: Option<usize>, ) -> Vec<Vec<T>>
Label spreading algorithm
Spreads labels (one-hot encoded categorical data) over the graph. The input needs to be of structure:
class 1 -> [1.0, 0.0, 0.0, 0.0]
class 2 -> [0.0, 1.0, 0.0, 0.0]
unlabelled -> [0.0, 0.0, 0.0, 0.0]
Labelled nodes are anchored to their original labels and act as sources, while unlabelled nodes receive purely propagated distributions.
§Params
labels- One-hot encoded group membership. All zeroes == unlabelled.mask- Boolean slice wheretrueindicates an unlabelled node.alpha- Anchoring strength for labelled nodes, typically 0.9 to 0.95. Higher values anchor more strongly to the original label; lower values allow more influence from neighbours.iterations- Maximum number of spreading iterations.tolerance- Convergence threshold. Stops early if the maximum change across all nodes and classes falls below this value.max_hops- IfSome(k), restricts spreading to nodes withinkhops of any labelled node. Nodes beyond this limit are never updated and remain as all-zeroes. IfNone, spreading is unrestricted.
§Returns
A Vec<Vec<T>> of length n_nodes where each entry is the probability
distribution over classes for that node.
Trait Implementations§
Source§impl<T: Clone> Clone for KnnLabPropGraph<T>
impl<T: Clone> Clone for KnnLabPropGraph<T>
Auto Trait Implementations§
impl<T> Freeze for KnnLabPropGraph<T>
impl<T> RefUnwindSafe for KnnLabPropGraph<T>where
Vec<T>: RefUnwindSafe,
impl<T> Send for KnnLabPropGraph<T>
impl<T> Sync for KnnLabPropGraph<T>
impl<T> Unpin for KnnLabPropGraph<T>
impl<T> UnsafeUnpin for KnnLabPropGraph<T>where
Vec<T>: UnsafeUnpin,
impl<T> UnwindSafe for KnnLabPropGraph<T>where
Vec<T>: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T, U> Imply<T> for U
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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 moreSource§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.