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.mean_axis(scirs2_core::ndarray::Axis(0)).unwrap();
27 let components = Array2::eye(n_components);
28 let explained_variance_ratio = Array1::ones(n_components) / n_components as f64;
29
30 self.trained_state = Some(DRTrainedState {
31 components,
32 explained_variance_ratio,
33 mean,
34 scale: None,
35 quantum_parameters: HashMap::new(),
36 model_parameters: HashMap::new(),
37 training_statistics: HashMap::new(),
38 });
39 Ok(())
40 }
41
42 pub fn get_trained_state(&self) -> Option<DRTrainedState> {
43 self.trained_state.clone()
44 }
45}