Skip to main content

CCIPCA

Struct CCIPCA 

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

Candid Covariance-free Incremental PCA (CCIPCA).

Maintains n_components eigenvector estimates that are updated with each new sample using a covariance-free rank-one update rule. The amnestic weight controls how quickly old data is forgotten (0.0 = equal weighting).

Dimensionality is determined lazily from the first call to update, matching the pattern of IncrementalNormalizer.

Implementations§

Source§

impl CCIPCA

Source

pub fn new(n_components: usize) -> Self

Create a CCIPCA estimator with n_components components and no forgetting.

use irithyll::preprocessing::CCIPCA;
let pca = CCIPCA::new(3);
assert_eq!(pca.n_components(), 3);
assert_eq!(pca.count(), 0);
Source

pub fn with_amnestic(n_components: usize, amnestic: f64) -> Self

Create a CCIPCA estimator with a custom amnestic (forgetting) weight.

Higher amnestic values give more weight to recent samples. A value of 0.0 weights all samples equally.

use irithyll::preprocessing::CCIPCA;
let pca = CCIPCA::with_amnestic(2, 1.5);
assert_eq!(pca.n_components(), 2);
Source

pub fn update(&mut self, features: &[f64])

Incorporate a new sample and update eigencomponent estimates.

On the first call, the feature dimensionality is established from features.len(). Subsequent calls must provide the same length.

The algorithm performs:

  1. Welford mean update.
  2. Center the sample.
  3. Rank-one update of each eigenvector with re-orthogonalisation.
  4. Sort components by descending eigenvalue.
§Panics

Panics if features.len() does not match the established dimensionality.

Source

pub fn transform(&self, features: &[f64]) -> Vec<f64>

Project features onto the current principal components.

Centers the input using the running mean and computes the dot product with each eigenvector. Returns a Vec of length n_components.

§Panics

Panics if features.len() does not match the established dimensionality, or if no samples have been incorporated yet.

Source

pub fn update_and_transform(&mut self, features: &[f64]) -> Vec<f64>

Update eigencomponents with features, then project onto them.

Equivalent to calling update followed by transform.

Source

pub fn reset(&mut self)

Reset all state, preserving n_components and amnestic settings.

After reset, the next update call will re-initialise the feature dimensionality from the input.

Source

pub fn n_components(&self) -> usize

Number of principal components being estimated.

Source

pub fn n_features(&self) -> Option<usize>

Feature dimensionality, or None if not yet initialised.

Source

pub fn count(&self) -> u64

Number of samples incorporated so far.

Source

pub fn eigenvalues(&self) -> &[f64]

Current eigenvalue estimates (sorted descending).

Source

pub fn explained_variance_ratio(&self) -> Vec<f64>

Explained variance ratio for each component.

Each element is the component’s eigenvalue divided by the sum of all eigenvalues. Returns an empty Vec if no samples have been incorporated.

Trait Implementations§

Source§

impl Clone for CCIPCA

Source§

fn clone(&self) -> CCIPCA

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 CCIPCA

Source§

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

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

impl Default for CCIPCA

Source§

fn default() -> Self

Default CCIPCA with 2 components and no forgetting.

Source§

impl StreamingPreprocessor for CCIPCA

Source§

fn update_and_transform(&mut self, features: &[f64]) -> Vec<f64>

Update internal statistics from this sample and return transformed features. Read more
Source§

fn transform(&self, features: &[f64]) -> Vec<f64>

Transform features using current statistics without updating them. Read more
Source§

fn output_dim(&self) -> Option<usize>

Number of output features, or None if unknown until the first sample.
Source§

fn reset(&mut self)

Reset to initial (untrained) state.

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> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

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

Initializes a with the given initializer. Read more
Source§

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

Dereferences the given pointer. Read more
Source§

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

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
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<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,