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