quantrs2_ml/dimensionality_reduction/linear/
qkernel_pca.rs

1//! Quantum Kernel Principal Component Analysis
2
3use crate::error::{MLError, Result};
4use scirs2_core::ndarray::{Array1, Array2};
5use std::collections::HashMap;
6
7use super::super::config::{DRTrainedState, QKernelPCAConfig};
8
9/// Quantum Kernel Principal Component Analysis implementation
10#[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}