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};