quantrs2_ml/dimensionality_reduction/linear/
qkernel_pca.rs1use crate::error::{MLError, Result};
4use scirs2_core::ndarray::{Array1, Array2};
5use std::collections::HashMap;
6
7use super::super::config::{DRTrainedState, QKernelPCAConfig};
8
9#[derive(Debug)]
11pub struct QKernelPCA {
12 config: QKernelPCAConfig,
13 trained_state: Option<DRTrainedState>,
14}
15
16impl QKernelPCA {
17 pub fn new(config: QKernelPCAConfig) -> Self {
18 Self {
19 config,
20 trained_state: None,
21 }
22 }
23
24 pub fn fit(&mut self, data: &Array2<f64>) -> Result<()> {
25 let n_components = self.config.n_components.min(data.ncols());
26 let mean = data
27 .mean_axis(scirs2_core::ndarray::Axis(0))
28 .unwrap_or_else(|| scirs2_core::ndarray::Array1::zeros(data.ncols()));
29 let components = Array2::eye(n_components);
30 let explained_variance_ratio = Array1::ones(n_components) / n_components as f64;
31
32 self.trained_state = Some(DRTrainedState {
33 components,
34 explained_variance_ratio,
35 mean,
36 scale: None,
37 quantum_parameters: HashMap::new(),
38 model_parameters: HashMap::new(),
39 training_statistics: HashMap::new(),
40 });
41 Ok(())
42 }
43
44 pub fn get_trained_state(&self) -> Option<DRTrainedState> {
45 self.trained_state.clone()
46 }
47}