Skip to main content

tensorlogic_sklears_kernels/kernel_pca/
mod.rs

1//! Kernel Principal Component Analysis (Scholkopf, Smola & Muller, 1998).
2//!
3//! This module provides a fully self-contained implementation of Kernel PCA
4//! that operates through the crate's [`Kernel`](crate::types::Kernel) trait.
5//! Any kernel in the crate (RBF, Linear, Polynomial, Symbolic, etc.) can be
6//! plugged in; the only additional requirement for fitting is `Clone + 'static`,
7//! which every shipped kernel satisfies.
8//!
9//! # Module map
10//!
11//! | Submodule        | Purpose                                                     |
12//! |------------------|-------------------------------------------------------------|
13//! | [`centering`]    | Double-centering of the Gram matrix + test-time centering   |
14//! | [`eigendecomp`]  | Wrapper around `scirs2_linalg::eigh` for top-k eigenpairs   |
15//! | [`error`]        | `KernelPcaError` / `KernelPcaResult` types                  |
16//! | [`model`]        | `KernelPCA`, `KernelPcaConfig`, `FittedKernelPCA`           |
17//!
18//! # Minimal example
19//!
20//! ```rust,no_run
21//! use tensorlogic_sklears_kernels::kernel_pca::{KernelPCA, KernelPcaConfig};
22//! use tensorlogic_sklears_kernels::RbfKernel;
23//! use tensorlogic_sklears_kernels::RbfKernelConfig;
24//!
25//! let kernel = RbfKernel::new(RbfKernelConfig::new(1.0)).expect("kernel");
26//! let config = KernelPcaConfig::new(2);
27//! let model = KernelPCA::build(kernel, config).expect("model");
28//!
29//! let data = vec![
30//!     vec![1.0, 2.0],
31//!     vec![3.0, 4.0],
32//!     vec![5.0, 6.0],
33//! ];
34//! let fitted = model.fit(&data).expect("fit");
35//! let embedding = fitted.transform(&data).expect("transform");
36//! assert_eq!(embedding.nrows(), 3);
37//! assert_eq!(embedding.ncols(), 2);
38//! ```
39//!
40//! # References
41//!
42//! - Scholkopf, B., Smola, A. & Muller, K.-R. (1998). *Nonlinear
43//!   Component Analysis as a Kernel Eigenvalue Problem*. Neural
44//!   Computation 10(5), 1299--1319.
45
46pub mod centering;
47pub mod eigendecomp;
48pub mod error;
49pub mod model;
50
51#[cfg(test)]
52mod tests;
53
54pub use centering::{center_test_kernel, double_center, KernelCenteringStats};
55pub use eigendecomp::{symmetric_eigendecomp, TopKEigen};
56pub use error::{KernelPcaError, KernelPcaResult};
57pub use model::{FittedKernelPCA, KernelPCA, KernelPcaConfig};