pub struct SpikingNeuralClusterer { /* private fields */ }Expand description
Spiking neural network clusterer
This clusterer uses a network of spiking neurons with STDP learning to perform unsupervised clustering of spatial data. Input points are encoded as spike trains and presented to the network, which learns to respond selectively to different input patterns through competitive dynamics.
§Features
- Rate coding for spatial data encoding
- STDP learning for adaptive weights
- Lateral inhibition for competitive dynamics
- Configurable network architecture
- Spike timing analysis
§Example
use scirs2_core::ndarray::Array2;
use scirs2_spatial::neuromorphic::algorithms::SpikingNeuralClusterer;
let points = Array2::from_shape_vec((4, 2), vec![
0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0
]).unwrap();
let mut clusterer = SpikingNeuralClusterer::new(2)
.with_spike_threshold(0.8)
.with_stdp_learning(true)
.with_lateral_inhibition(true);
let (assignments, spike_events) = clusterer.fit(&points.view()).unwrap();
println!("Cluster assignments: {:?}", assignments);Implementations§
Source§impl SpikingNeuralClusterer
impl SpikingNeuralClusterer
Sourcepub fn with_spike_threshold(self, threshold: f64) -> Self
pub fn with_spike_threshold(self, threshold: f64) -> Self
Sourcepub fn with_stdp_learning(self, enabled: bool) -> Self
pub fn with_stdp_learning(self, enabled: bool) -> Self
Sourcepub fn with_lateral_inhibition(self, enabled: bool) -> Self
pub fn with_lateral_inhibition(self, enabled: bool) -> Self
Sourcepub fn with_training_params(
self,
max_epochs: usize,
simulation_duration: f64,
) -> Self
pub fn with_training_params( self, max_epochs: usize, simulation_duration: f64, ) -> Self
Configure training parameters
§Arguments
max_epochs- Maximum number of training epochssimulation_duration- Duration to simulate per data point
Sourcepub fn with_time_step(self, dt: f64) -> Self
pub fn with_time_step(self, dt: f64) -> Self
Sourcepub fn fit(
&mut self,
points: &ArrayView2<'_, f64>,
) -> SpatialResult<(Array1<usize>, Vec<SpikeEvent>)>
pub fn fit( &mut self, points: &ArrayView2<'_, f64>, ) -> SpatialResult<(Array1<usize>, Vec<SpikeEvent>)>
Fit clustering to spatial data
Trains the spiking neural network on the provided spatial data using STDP learning and competitive dynamics to discover cluster structure.
§Arguments
points- Input points to cluster (n_points × n_dims)
§Returns
Tuple of (cluster assignments, spike events) where assignments maps each point to its cluster and spike_events contains the complete spike timing history.
Sourcepub fn num_clusters(&self) -> usize
pub fn num_clusters(&self) -> usize
Get number of clusters
Sourcepub fn spike_threshold(&self) -> f64
pub fn spike_threshold(&self) -> f64
Get spike threshold
Sourcepub fn is_stdp_enabled(&self) -> bool
pub fn is_stdp_enabled(&self) -> bool
Check if STDP learning is enabled
Sourcepub fn is_lateral_inhibition_enabled(&self) -> bool
pub fn is_lateral_inhibition_enabled(&self) -> bool
Check if lateral inhibition is enabled
Sourcepub fn spike_history(&self) -> &[SpikeEvent]
pub fn spike_history(&self) -> &[SpikeEvent]
Get current spike history
Sourcepub fn network_stats(&self) -> NetworkStats
pub fn network_stats(&self) -> NetworkStats
Get network statistics
Trait Implementations§
Source§impl Clone for SpikingNeuralClusterer
impl Clone for SpikingNeuralClusterer
Source§fn clone(&self) -> SpikingNeuralClusterer
fn clone(&self) -> SpikingNeuralClusterer
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for SpikingNeuralClusterer
impl RefUnwindSafe for SpikingNeuralClusterer
impl Send for SpikingNeuralClusterer
impl Sync for SpikingNeuralClusterer
impl Unpin for SpikingNeuralClusterer
impl UnwindSafe for SpikingNeuralClusterer
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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
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.