quantrs2_ml/dimensionality_reduction/
config.rs

1//! Configuration types for quantum dimensionality reduction
2
3use scirs2_core::ndarray::{Array1, Array2};
4use std::collections::HashMap;
5
6/// Quantum dimensionality reduction algorithms
7#[derive(Debug, Clone, Copy, PartialEq)]
8pub enum DimensionalityReductionAlgorithm {
9    /// Quantum Principal Component Analysis
10    QPCA,
11    /// Quantum Independent Component Analysis
12    QICA,
13    /// Quantum t-distributed Stochastic Neighbor Embedding
14    QtSNE,
15    /// Quantum Uniform Manifold Approximation and Projection
16    QUMAP,
17    /// Quantum Linear Discriminant Analysis
18    QLDA,
19    /// Quantum Factor Analysis
20    QFactorAnalysis,
21    /// Quantum Canonical Correlation Analysis
22    QCCA,
23    /// Quantum Non-negative Matrix Factorization
24    QNMF,
25    /// Quantum Variational Autoencoder
26    QVAE,
27    /// Quantum Denoising Autoencoder
28    QDenoisingAE,
29    /// Quantum Sparse Autoencoder
30    QSparseAE,
31    /// Quantum Manifold Learning
32    QManifoldLearning,
33    /// Quantum Kernel PCA
34    QKernelPCA,
35    /// Quantum Multidimensional Scaling
36    QMDS,
37    /// Quantum Isomap
38    QIsomap,
39    /// Quantum Mutual Information Selection
40    QMutualInfoSelection,
41    /// Quantum Recursive Feature Elimination
42    QRFE,
43    /// Quantum LASSO
44    QLASSO,
45    /// Quantum Ridge Regression
46    QRidge,
47    /// Quantum Variance Thresholding
48    QVarianceThresholding,
49    /// Quantum Time Series Dimensionality Reduction
50    QTimeSeriesDR,
51    /// Quantum Image/Tensor Dimensionality Reduction
52    QImageTensorDR,
53    /// Quantum Graph Dimensionality Reduction
54    QGraphDR,
55    /// Quantum Streaming Dimensionality Reduction
56    QStreamingDR,
57}
58
59/// Quantum distance metrics for dimensionality reduction
60#[derive(Debug, Clone, Copy, PartialEq)]
61pub enum QuantumDistanceMetric {
62    /// Quantum Euclidean distance
63    QuantumEuclidean,
64    /// Quantum Manhattan distance
65    QuantumManhattan,
66    /// Quantum cosine similarity
67    QuantumCosine,
68    /// Quantum fidelity-based distance
69    QuantumFidelity,
70    /// Quantum trace distance
71    QuantumTrace,
72    /// Quantum Wasserstein distance
73    QuantumWasserstein,
74    /// Quantum kernel-based distance
75    QuantumKernel,
76    /// Quantum entanglement-based distance
77    QuantumEntanglement,
78}
79
80/// Quantum enhancement levels
81#[derive(Debug, Clone, Copy, PartialEq)]
82pub enum QuantumEnhancementLevel {
83    /// No quantum enhancement (classical)
84    Classical,
85    /// Light quantum enhancement
86    Light,
87    /// Moderate quantum enhancement
88    Moderate,
89    /// Full quantum enhancement
90    Full,
91    /// Experimental quantum features
92    Experimental,
93}
94
95/// Eigensolvers for quantum algorithms
96#[derive(Debug, Clone, Copy, PartialEq)]
97pub enum QuantumEigensolver {
98    /// Variational Quantum Eigensolver
99    VQE,
100    /// Quantum Approximate Optimization Algorithm
101    QAOA,
102    /// Quantum Phase Estimation
103    QPE,
104    /// Quantum Lanczos Algorithm
105    QuantumLanczos,
106    /// Quantum Power Method
107    QuantumPowerMethod,
108}
109
110/// Feature map types for quantum kernel methods
111#[derive(Debug, Clone, Copy, PartialEq)]
112pub enum QuantumFeatureMap {
113    /// Z-feature map
114    ZFeatureMap,
115    /// ZZ-feature map
116    ZZFeatureMap,
117    /// Pauli feature map
118    PauliFeatureMap,
119    /// Custom parameterized feature map
120    CustomFeatureMap,
121}
122
123/// Autoencoder architectures
124#[derive(Debug, Clone, Copy, PartialEq)]
125pub enum AutoencoderArchitecture {
126    /// Standard variational autoencoder
127    Standard,
128    /// Beta-VAE with controlled disentanglement
129    BetaVAE,
130    /// WAE (Wasserstein autoencoder)
131    WAE,
132    /// InfoVAE
133    InfoVAE,
134    /// Adversarial autoencoder
135    AdversarialAE,
136}
137
138/// Configuration for Quantum Principal Component Analysis
139#[derive(Debug, Clone)]
140pub struct QPCAConfig {
141    /// Number of components to keep
142    pub n_components: usize,
143    /// Quantum eigensolver to use
144    pub eigensolver: QuantumEigensolver,
145    /// Quantum enhancement level
146    pub quantum_enhancement: QuantumEnhancementLevel,
147    /// Number of qubits for quantum computation
148    pub num_qubits: usize,
149    /// Whether to whiten the components
150    pub whiten: bool,
151    /// Random state for reproducibility
152    pub random_state: Option<u64>,
153    /// Convergence tolerance for eigensolvers
154    pub tolerance: f64,
155    /// Maximum iterations for iterative eigensolvers
156    pub max_iterations: usize,
157}
158
159/// Configuration for Quantum Independent Component Analysis
160#[derive(Debug, Clone)]
161pub struct QICAConfig {
162    /// Number of components to extract
163    pub n_components: usize,
164    /// Maximum iterations for optimization
165    pub max_iterations: usize,
166    /// Convergence tolerance
167    pub tolerance: f64,
168    /// Quantum enhancement level
169    pub quantum_enhancement: QuantumEnhancementLevel,
170    /// Number of qubits for quantum computation
171    pub num_qubits: usize,
172    /// Learning rate for optimization
173    pub learning_rate: f64,
174    /// Non-linearity function type
175    pub nonlinearity: String,
176    /// Random state for reproducibility
177    pub random_state: Option<u64>,
178}
179
180/// Configuration for Quantum t-SNE
181#[derive(Debug, Clone)]
182pub struct QtSNEConfig {
183    /// Number of components in the embedded space
184    pub n_components: usize,
185    /// Perplexity parameter
186    pub perplexity: f64,
187    /// Early exaggeration factor
188    pub early_exaggeration: f64,
189    /// Learning rate
190    pub learning_rate: f64,
191    /// Maximum iterations
192    pub max_iterations: usize,
193    /// Quantum enhancement level
194    pub quantum_enhancement: QuantumEnhancementLevel,
195    /// Number of qubits for quantum computation
196    pub num_qubits: usize,
197    /// Distance metric to use
198    pub distance_metric: QuantumDistanceMetric,
199    /// Random state for reproducibility
200    pub random_state: Option<u64>,
201}
202
203/// Configuration for Quantum UMAP
204#[derive(Debug, Clone)]
205pub struct QUMAPConfig {
206    /// Number of components in the embedded space
207    pub n_components: usize,
208    /// Number of neighbors to consider
209    pub n_neighbors: usize,
210    /// Minimum distance in embedded space
211    pub min_dist: f64,
212    /// Learning rate
213    pub learning_rate: f64,
214    /// Number of epochs for optimization
215    pub n_epochs: usize,
216    /// Quantum enhancement level
217    pub quantum_enhancement: QuantumEnhancementLevel,
218    /// Number of qubits for quantum computation
219    pub num_qubits: usize,
220    /// Distance metric to use
221    pub distance_metric: QuantumDistanceMetric,
222    /// Random state for reproducibility
223    pub random_state: Option<u64>,
224}
225
226/// Configuration for Quantum Linear Discriminant Analysis
227#[derive(Debug, Clone)]
228pub struct QLDAConfig {
229    /// Number of components to keep
230    pub n_components: Option<usize>,
231    /// Shrinkage parameter for regularization
232    pub shrinkage: Option<f64>,
233    /// Quantum enhancement level
234    pub quantum_enhancement: QuantumEnhancementLevel,
235    /// Number of qubits for quantum computation
236    pub num_qubits: usize,
237    /// Solver for eigenvalue problems
238    pub solver: QuantumEigensolver,
239    /// Random state for reproducibility
240    pub random_state: Option<u64>,
241}
242
243/// Configuration for Quantum Autoencoder
244#[derive(Debug, Clone)]
245pub struct QAutoencoderConfig {
246    /// Encoder layer dimensions
247    pub encoder_layers: Vec<usize>,
248    /// Decoder layer dimensions
249    pub decoder_layers: Vec<usize>,
250    /// Latent dimension
251    pub latent_dim: usize,
252    /// Autoencoder architecture
253    pub architecture: AutoencoderArchitecture,
254    /// Learning rate
255    pub learning_rate: f64,
256    /// Training epochs
257    pub epochs: usize,
258    /// Batch size
259    pub batch_size: usize,
260    /// Quantum enhancement level
261    pub quantum_enhancement: QuantumEnhancementLevel,
262    /// Number of qubits for quantum computation
263    pub num_qubits: usize,
264    /// Beta parameter for Beta-VAE
265    pub beta: f64,
266    /// Noise level for denoising autoencoder
267    pub noise_level: f64,
268    /// Sparsity parameter for sparse autoencoder
269    pub sparsity_parameter: f64,
270    /// Random state for reproducibility
271    pub random_state: Option<u64>,
272}
273
274/// Configuration for Quantum Factor Analysis
275#[derive(Debug, Clone)]
276pub struct QFactorAnalysisConfig {
277    /// Number of factors
278    pub n_factors: usize,
279    /// Maximum iterations
280    pub max_iterations: usize,
281    /// Convergence tolerance
282    pub tolerance: f64,
283    /// Quantum enhancement level
284    pub quantum_enhancement: QuantumEnhancementLevel,
285    /// Number of qubits
286    pub num_qubits: usize,
287    /// Random state
288    pub random_state: Option<u64>,
289}
290
291/// Configuration for Quantum Canonical Correlation Analysis
292#[derive(Debug, Clone)]
293pub struct QCCAConfig {
294    /// Number of components
295    pub n_components: usize,
296    /// Quantum enhancement level
297    pub quantum_enhancement: QuantumEnhancementLevel,
298    /// Number of qubits
299    pub num_qubits: usize,
300    /// Random state
301    pub random_state: Option<u64>,
302}
303
304/// Configuration for Quantum Non-negative Matrix Factorization
305#[derive(Debug, Clone)]
306pub struct QNMFConfig {
307    /// Number of components
308    pub n_components: usize,
309    /// Maximum iterations
310    pub max_iterations: usize,
311    /// Convergence tolerance
312    pub tolerance: f64,
313    /// Quantum enhancement level
314    pub quantum_enhancement: QuantumEnhancementLevel,
315    /// Number of qubits
316    pub num_qubits: usize,
317    /// Random state
318    pub random_state: Option<u64>,
319}
320
321/// Configuration for Quantum Manifold Learning
322#[derive(Debug, Clone)]
323pub struct QManifoldConfig {
324    /// Number of components
325    pub n_components: usize,
326    /// Number of neighbors
327    pub n_neighbors: usize,
328    /// Quantum enhancement level
329    pub quantum_enhancement: QuantumEnhancementLevel,
330    /// Number of qubits
331    pub num_qubits: usize,
332    /// Distance metric
333    pub distance_metric: QuantumDistanceMetric,
334    /// Random state
335    pub random_state: Option<u64>,
336}
337
338/// Configuration for Quantum Kernel PCA
339#[derive(Debug, Clone)]
340pub struct QKernelPCAConfig {
341    /// Number of components
342    pub n_components: usize,
343    /// Quantum feature map
344    pub feature_map: QuantumFeatureMap,
345    /// Quantum enhancement level
346    pub quantum_enhancement: QuantumEnhancementLevel,
347    /// Number of qubits
348    pub num_qubits: usize,
349    /// Kernel parameters
350    pub kernel_params: HashMap<String, f64>,
351    /// Random state
352    pub random_state: Option<u64>,
353}
354
355/// Configuration for Quantum Feature Selection
356#[derive(Debug, Clone)]
357pub struct QFeatureSelectionConfig {
358    /// Number of features to select
359    pub n_features: usize,
360    /// Selection method
361    pub method: String,
362    /// Quantum enhancement level
363    pub quantum_enhancement: QuantumEnhancementLevel,
364    /// Number of qubits
365    pub num_qubits: usize,
366    /// Random state
367    pub random_state: Option<u64>,
368}
369
370/// Configuration for specialized quantum methods
371#[derive(Debug, Clone)]
372pub struct QSpecializedConfig {
373    /// Method-specific parameters
374    pub params: HashMap<String, f64>,
375    /// Quantum enhancement level
376    pub quantum_enhancement: QuantumEnhancementLevel,
377    /// Number of qubits
378    pub num_qubits: usize,
379    /// Random state
380    pub random_state: Option<u64>,
381}
382
383/// Trained state for dimensionality reduction
384#[derive(Debug, Clone)]
385pub struct DRTrainedState {
386    /// Principal components or transformation matrix
387    pub components: Array2<f64>,
388    /// Explained variance ratios
389    pub explained_variance_ratio: Array1<f64>,
390    /// Mean of training data
391    pub mean: Array1<f64>,
392    /// Scaling factors
393    pub scale: Option<Array1<f64>>,
394    /// Quantum circuit parameters
395    pub quantum_parameters: HashMap<String, f64>,
396    /// Model-specific parameters
397    pub model_parameters: HashMap<String, String>,
398    /// Training data statistics
399    pub training_statistics: HashMap<String, f64>,
400}
401
402// Default implementations
403impl Default for QPCAConfig {
404    fn default() -> Self {
405        Self {
406            n_components: 2,
407            eigensolver: QuantumEigensolver::VQE,
408            quantum_enhancement: QuantumEnhancementLevel::Moderate,
409            num_qubits: 4,
410            whiten: false,
411            random_state: None,
412            tolerance: 1e-6,
413            max_iterations: 1000,
414        }
415    }
416}
417
418impl Default for QICAConfig {
419    fn default() -> Self {
420        Self {
421            n_components: 2,
422            max_iterations: 200,
423            tolerance: 1e-4,
424            quantum_enhancement: QuantumEnhancementLevel::Moderate,
425            num_qubits: 4,
426            learning_rate: 1.0,
427            nonlinearity: "logcosh".to_string(),
428            random_state: None,
429        }
430    }
431}
432
433impl Default for QtSNEConfig {
434    fn default() -> Self {
435        Self {
436            n_components: 2,
437            perplexity: 30.0,
438            early_exaggeration: 12.0,
439            learning_rate: 200.0,
440            max_iterations: 1000,
441            quantum_enhancement: QuantumEnhancementLevel::Moderate,
442            num_qubits: 4,
443            distance_metric: QuantumDistanceMetric::QuantumEuclidean,
444            random_state: None,
445        }
446    }
447}
448
449impl Default for QAutoencoderConfig {
450    fn default() -> Self {
451        Self {
452            encoder_layers: vec![128, 64, 32],
453            decoder_layers: vec![32, 64, 128],
454            latent_dim: 16,
455            architecture: AutoencoderArchitecture::Standard,
456            learning_rate: 0.001,
457            epochs: 100,
458            batch_size: 32,
459            quantum_enhancement: QuantumEnhancementLevel::Moderate,
460            num_qubits: 4,
461            beta: 1.0,
462            noise_level: 0.1,
463            sparsity_parameter: 0.01,
464            random_state: None,
465        }
466    }
467}
468
469impl Default for QUMAPConfig {
470    fn default() -> Self {
471        Self {
472            n_components: 2,
473            n_neighbors: 15,
474            min_dist: 0.1,
475            learning_rate: 1.0,
476            n_epochs: 200,
477            quantum_enhancement: QuantumEnhancementLevel::Moderate,
478            num_qubits: 4,
479            distance_metric: QuantumDistanceMetric::QuantumEuclidean,
480            random_state: None,
481        }
482    }
483}
484
485impl Default for QLDAConfig {
486    fn default() -> Self {
487        Self {
488            n_components: None,
489            shrinkage: None,
490            quantum_enhancement: QuantumEnhancementLevel::Moderate,
491            num_qubits: 4,
492            solver: QuantumEigensolver::VQE,
493            random_state: None,
494        }
495    }
496}
497
498impl Default for QManifoldConfig {
499    fn default() -> Self {
500        Self {
501            n_components: 2,
502            n_neighbors: 10,
503            quantum_enhancement: QuantumEnhancementLevel::Moderate,
504            num_qubits: 4,
505            distance_metric: QuantumDistanceMetric::QuantumEuclidean,
506            random_state: None,
507        }
508    }
509}
510
511impl Default for QKernelPCAConfig {
512    fn default() -> Self {
513        Self {
514            n_components: 2,
515            feature_map: QuantumFeatureMap::ZFeatureMap,
516            quantum_enhancement: QuantumEnhancementLevel::Moderate,
517            num_qubits: 4,
518            kernel_params: HashMap::new(),
519            random_state: None,
520        }
521    }
522}