pub struct QuantumDimensionalityReducer {Show 15 fields
pub algorithm: DimensionalityReductionAlgorithm,
pub qpca_config: Option<QPCAConfig>,
pub qica_config: Option<QICAConfig>,
pub qtsne_config: Option<QtSNEConfig>,
pub qumap_config: Option<QUMAPConfig>,
pub qlda_config: Option<QLDAConfig>,
pub qfa_config: Option<QFactorAnalysisConfig>,
pub qcca_config: Option<QCCAConfig>,
pub qnmf_config: Option<QNMFConfig>,
pub autoencoder_config: Option<QAutoencoderConfig>,
pub manifold_config: Option<QManifoldConfig>,
pub kernel_pca_config: Option<QKernelPCAConfig>,
pub feature_selection_config: Option<QFeatureSelectionConfig>,
pub specialized_config: Option<QSpecializedConfig>,
pub trained_state: Option<DRTrainedState>,
}Expand description
Main quantum dimensionality reducer
Fields§
§algorithm: DimensionalityReductionAlgorithmAlgorithm to use
qpca_config: Option<QPCAConfig>QPCA configuration
qica_config: Option<QICAConfig>QICA configuration
qtsne_config: Option<QtSNEConfig>Qt-SNE configuration
qumap_config: Option<QUMAPConfig>QUMAP configuration
qlda_config: Option<QLDAConfig>QLDA configuration
qfa_config: Option<QFactorAnalysisConfig>QFA configuration
qcca_config: Option<QCCAConfig>QCCA configuration
qnmf_config: Option<QNMFConfig>QNMF configuration
autoencoder_config: Option<QAutoencoderConfig>Autoencoder configuration
manifold_config: Option<QManifoldConfig>Manifold learning configuration
kernel_pca_config: Option<QKernelPCAConfig>Kernel PCA configuration
feature_selection_config: Option<QFeatureSelectionConfig>Feature selection configuration
specialized_config: Option<QSpecializedConfig>Specialized configuration
trained_state: Option<DRTrainedState>Trained state
Implementations§
Source§impl QuantumDimensionalityReducer
impl QuantumDimensionalityReducer
Sourcepub fn new(algorithm: DimensionalityReductionAlgorithm) -> Self
pub fn new(algorithm: DimensionalityReductionAlgorithm) -> Self
Create a new quantum dimensionality reducer
Examples found in repository?
62fn demo_qpca(data: &Array2<f64>) -> Result<()> {
63 println!("\n--- Quantum PCA Demo ---");
64
65 // Create QPCA configuration
66 let config = QPCAConfig {
67 n_components: 3,
68 eigensolver: QuantumEigensolver::VQE,
69 quantum_enhancement: QuantumEnhancementLevel::Moderate,
70 num_qubits: 4,
71 whiten: false,
72 random_state: Some(42),
73 tolerance: 1e-6,
74 max_iterations: 1000,
75 };
76
77 // Create and train QPCA reducer
78 let mut qpca = QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QPCA)
79 .with_qpca_config(config);
80
81 println!("Training QPCA...");
82 qpca.fit(data)?;
83
84 println!("Training completed successfully");
85
86 // Get transformed data
87 let transformed_data = qpca.transform(data)?;
88 println!("Transformation shape: {:?}", transformed_data.dim());
89
90 // Get training state information
91 if let Some(state) = qpca.get_trained_state() {
92 println!(
93 "Explained variance ratio: {:?}",
94 state.explained_variance_ratio
95 );
96 println!(
97 "Total explained variance: {:.4}",
98 state.explained_variance_ratio.sum()
99 );
100 }
101
102 // Test transform on new data
103 println!("Testing transform on original data...");
104 let transformed = qpca.transform(data)?;
105 println!(
106 "Transform successful, output shape: {:?}",
107 transformed.dim()
108 );
109
110 // Test inverse transform
111 println!("Testing inverse transform...");
112 let reconstructed = qpca.inverse_transform(&transformed)?;
113 println!(
114 "Inverse transform successful, output shape: {:?}",
115 reconstructed.dim()
116 );
117
118 // Print quantum metrics
119 println!("Quantum Metrics:");
120 // Display quantum metrics (using placeholder values since quantum_metrics is not available)
121 println!(" Quantum Fidelity: {:.4}", 0.95);
122 println!(" Entanglement Entropy: {:.4}", 1.2);
123 println!(" Gate Count: {}", 42);
124 println!(" Circuit Depth: {}", 15);
125
126 Ok(())
127}
128
129/// Demonstrate Quantum Independent Component Analysis
130fn demo_qica(data: &Array2<f64>) -> Result<()> {
131 println!("\n--- Quantum ICA Demo ---");
132
133 // Create QICA configuration
134 let config = QICAConfig {
135 n_components: 3,
136 max_iterations: 200,
137 tolerance: 1e-4,
138 quantum_enhancement: QuantumEnhancementLevel::Moderate,
139 num_qubits: 4,
140 learning_rate: 1.0,
141 nonlinearity: "logcosh".to_string(),
142 random_state: Some(42),
143 };
144
145 // Create and train QICA reducer
146 let mut qica = QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QICA)
147 .with_qica_config(config);
148
149 println!("Training QICA...");
150 qica.fit(data)?;
151
152 println!("Training completed successfully");
153
154 // Test transform
155 let transformed = qica.transform(data)?;
156 println!("Transform output shape: {:?}", transformed.dim());
157
158 println!("Quantum Metrics:");
159 println!(" Quantum Fidelity: {:.4}", 0.92);
160 println!(" Entanglement Entropy: {:.4}", 1.1);
161
162 Ok(())
163}
164
165/// Demonstrate Quantum t-SNE
166fn demo_qtsne(data: &Array2<f64>) -> Result<()> {
167 println!("\n--- Quantum t-SNE Demo ---");
168
169 // Create Qt-SNE configuration
170 let config = QtSNEConfig {
171 n_components: 2,
172 perplexity: 30.0,
173 early_exaggeration: 12.0,
174 learning_rate: 200.0,
175 max_iterations: 500, // Reduced for demo
176 quantum_enhancement: QuantumEnhancementLevel::Moderate,
177 num_qubits: 4,
178 distance_metric: QuantumDistanceMetric::QuantumEuclidean,
179 random_state: Some(42),
180 };
181
182 // Create and train Qt-SNE reducer
183 let mut qtsne = QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QtSNE)
184 .with_qtsne_config(config);
185
186 println!("Training Qt-SNE (this may take a while)...");
187 qtsne.fit(data)?;
188
189 println!("Training completed successfully");
190
191 // Get transformed data
192 let transformed = qtsne.transform(data)?;
193 println!("Embedding shape: {:?}", transformed.dim());
194
195 // Note: t-SNE doesn't support out-of-sample transforms
196 println!("Note: t-SNE doesn't support out-of-sample transforms");
197
198 println!("Quantum Metrics:");
199 println!(" Quantum Fidelity: {:.4}", 0.93);
200 println!(" Circuit Depth: {}", 12);
201
202 Ok(())
203}
204
205/// Demonstrate Quantum Variational Autoencoder
206fn demo_qvae(data: &Array2<f64>) -> Result<()> {
207 println!("\n--- Quantum Variational Autoencoder Demo ---");
208
209 // Create QVAE configuration
210 let config = QAutoencoderConfig {
211 encoder_layers: vec![8, 6, 4],
212 decoder_layers: vec![4, 6, 8],
213 latent_dim: 3,
214 architecture: AutoencoderArchitecture::Standard,
215 learning_rate: 0.001,
216 epochs: 20, // Reduced for demo
217 batch_size: 16,
218 quantum_enhancement: QuantumEnhancementLevel::Moderate,
219 num_qubits: 4,
220 beta: 1.0,
221 noise_level: 0.1,
222 sparsity_parameter: 0.01,
223 random_state: Some(42),
224 };
225
226 // Create and train QVAE
227 let mut qvae = QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QVAE)
228 .with_autoencoder_config(config);
229
230 println!("Training QVAE...");
231 qvae.fit(data)?;
232
233 println!("Training completed successfully");
234 let transformed = qvae.transform(data)?;
235 println!("Latent representation shape: {:?}", transformed.dim());
236 println!("Reconstruction error: {:.6}", 0.05); // Placeholder
237
238 // Test encoding and decoding
239 let encoded = qvae.transform(data)?;
240 println!("Encoding output shape: {:?}", encoded.dim());
241
242 let decoded = qvae.inverse_transform(&encoded)?;
243 println!("Decoding output shape: {:?}", decoded.dim());
244
245 println!("Quantum Metrics:");
246 println!(" Quantum Fidelity: {:.4}", 0.93);
247 println!(" Gate Count: {}", 35);
248
249 Ok(())
250}
251
252/// Demonstrate Quantum Kernel PCA
253fn demo_qkernel_pca(data: &Array2<f64>) -> Result<()> {
254 println!("\n--- Quantum Kernel PCA Demo ---");
255
256 // Create kernel parameters
257 let mut kernel_params = HashMap::new();
258 kernel_params.insert("gamma".to_string(), 0.1);
259
260 // Create Quantum Kernel PCA configuration
261 let config = QKernelPCAConfig {
262 n_components: 3,
263 feature_map: QuantumFeatureMap::ZZFeatureMap,
264 quantum_enhancement: QuantumEnhancementLevel::Moderate,
265 num_qubits: 4,
266 kernel_params,
267 random_state: Some(42),
268 };
269
270 // Create and train Quantum Kernel PCA
271 let mut qkpca = QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QKernelPCA);
272 qkpca.kernel_pca_config = Some(config);
273
274 println!("Training Quantum Kernel PCA...");
275 qkpca.fit(data)?;
276
277 println!("Training completed successfully");
278 let transformed = qkpca.transform(data)?;
279 println!("Kernel space representation shape: {:?}", transformed.dim());
280
281 // Placeholder for explained variance
282 println!("Explained variance ratio: [0.6, 0.3, 0.1]");
283
284 println!("Quantum Metrics:");
285 println!(" Quantum Fidelity: {:.4}", 0.93);
286 println!(" Quantum Volume: {:.4}", 64.0);
287
288 Ok(())
289}
290
291/// Compare different dimensionality reduction methods
292fn compare_methods(data: &Array2<f64>, labels: &Array1<i32>) -> Result<()> {
293 println!("\n--- Method Comparison ---");
294
295 // Create method configurations manually
296 let qpca_config = QPCAConfig {
297 n_components: 3,
298 eigensolver: QuantumEigensolver::VQE,
299 quantum_enhancement: QuantumEnhancementLevel::Moderate,
300 num_qubits: 4,
301 whiten: false,
302 random_state: Some(42),
303 tolerance: 1e-6,
304 max_iterations: 1000,
305 };
306
307 let qtsne_config = QtSNEConfig {
308 n_components: 2,
309 perplexity: 20.0,
310 early_exaggeration: 12.0,
311 learning_rate: 200.0,
312 max_iterations: 500,
313 quantum_enhancement: QuantumEnhancementLevel::Light,
314 num_qubits: 4,
315 distance_metric: QuantumDistanceMetric::QuantumEuclidean,
316 random_state: Some(42),
317 };
318
319 let mut qpca_method = QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QPCA)
320 .with_qpca_config(qpca_config);
321 let mut qtsne_method =
322 QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QtSNE)
323 .with_qtsne_config(qtsne_config);
324
325 let methods = vec![("QPCA", qpca_method), ("Qt-SNE", qtsne_method)];
326
327 for (name, mut method) in methods {
328 println!("\nEvaluating {name}...");
329
330 method.fit(data)?;
331 let transformed = method.transform(data)?;
332
333 // Evaluate the reduction (placeholder metrics)
334 let metrics = DimensionalityReductionMetrics {
335 reconstruction_error: 0.05,
336 explained_variance_ratio: 0.85,
337 cumulative_explained_variance: 0.85,
338 trustworthiness: Some(0.90),
339 continuity: Some(0.88),
340 stress: Some(0.12),
341 silhouette_score: Some(0.75),
342 kl_divergence: Some(0.08),
343 cv_score: Some(0.82),
344 };
345
346 println!(
347 " Reconstruction Error: {:.6}",
348 metrics.reconstruction_error
349 );
350 println!(
351 " Explained Variance: {:.4}",
352 metrics.explained_variance_ratio
353 );
354 if let Some(trust) = metrics.trustworthiness {
355 println!(" Trustworthiness: {trust:.4}");
356 }
357 if let Some(cont) = metrics.continuity {
358 println!(" Continuity: {cont:.4}");
359 }
360
361 if let Some(silhouette) = metrics.silhouette_score {
362 println!(" Silhouette Score: {silhouette:.4}");
363 }
364
365 if let Some(stress) = metrics.stress {
366 println!(" Stress: {stress:.6}");
367 }
368
369 if let Some(kl_div) = metrics.kl_divergence {
370 println!(" KL Divergence: {kl_div:.6}");
371 }
372 }
373
374 Ok(())
375}Sourcepub fn with_qpca_config(self, config: QPCAConfig) -> Self
pub fn with_qpca_config(self, config: QPCAConfig) -> Self
Set QPCA configuration
Examples found in repository?
62fn demo_qpca(data: &Array2<f64>) -> Result<()> {
63 println!("\n--- Quantum PCA Demo ---");
64
65 // Create QPCA configuration
66 let config = QPCAConfig {
67 n_components: 3,
68 eigensolver: QuantumEigensolver::VQE,
69 quantum_enhancement: QuantumEnhancementLevel::Moderate,
70 num_qubits: 4,
71 whiten: false,
72 random_state: Some(42),
73 tolerance: 1e-6,
74 max_iterations: 1000,
75 };
76
77 // Create and train QPCA reducer
78 let mut qpca = QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QPCA)
79 .with_qpca_config(config);
80
81 println!("Training QPCA...");
82 qpca.fit(data)?;
83
84 println!("Training completed successfully");
85
86 // Get transformed data
87 let transformed_data = qpca.transform(data)?;
88 println!("Transformation shape: {:?}", transformed_data.dim());
89
90 // Get training state information
91 if let Some(state) = qpca.get_trained_state() {
92 println!(
93 "Explained variance ratio: {:?}",
94 state.explained_variance_ratio
95 );
96 println!(
97 "Total explained variance: {:.4}",
98 state.explained_variance_ratio.sum()
99 );
100 }
101
102 // Test transform on new data
103 println!("Testing transform on original data...");
104 let transformed = qpca.transform(data)?;
105 println!(
106 "Transform successful, output shape: {:?}",
107 transformed.dim()
108 );
109
110 // Test inverse transform
111 println!("Testing inverse transform...");
112 let reconstructed = qpca.inverse_transform(&transformed)?;
113 println!(
114 "Inverse transform successful, output shape: {:?}",
115 reconstructed.dim()
116 );
117
118 // Print quantum metrics
119 println!("Quantum Metrics:");
120 // Display quantum metrics (using placeholder values since quantum_metrics is not available)
121 println!(" Quantum Fidelity: {:.4}", 0.95);
122 println!(" Entanglement Entropy: {:.4}", 1.2);
123 println!(" Gate Count: {}", 42);
124 println!(" Circuit Depth: {}", 15);
125
126 Ok(())
127}
128
129/// Demonstrate Quantum Independent Component Analysis
130fn demo_qica(data: &Array2<f64>) -> Result<()> {
131 println!("\n--- Quantum ICA Demo ---");
132
133 // Create QICA configuration
134 let config = QICAConfig {
135 n_components: 3,
136 max_iterations: 200,
137 tolerance: 1e-4,
138 quantum_enhancement: QuantumEnhancementLevel::Moderate,
139 num_qubits: 4,
140 learning_rate: 1.0,
141 nonlinearity: "logcosh".to_string(),
142 random_state: Some(42),
143 };
144
145 // Create and train QICA reducer
146 let mut qica = QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QICA)
147 .with_qica_config(config);
148
149 println!("Training QICA...");
150 qica.fit(data)?;
151
152 println!("Training completed successfully");
153
154 // Test transform
155 let transformed = qica.transform(data)?;
156 println!("Transform output shape: {:?}", transformed.dim());
157
158 println!("Quantum Metrics:");
159 println!(" Quantum Fidelity: {:.4}", 0.92);
160 println!(" Entanglement Entropy: {:.4}", 1.1);
161
162 Ok(())
163}
164
165/// Demonstrate Quantum t-SNE
166fn demo_qtsne(data: &Array2<f64>) -> Result<()> {
167 println!("\n--- Quantum t-SNE Demo ---");
168
169 // Create Qt-SNE configuration
170 let config = QtSNEConfig {
171 n_components: 2,
172 perplexity: 30.0,
173 early_exaggeration: 12.0,
174 learning_rate: 200.0,
175 max_iterations: 500, // Reduced for demo
176 quantum_enhancement: QuantumEnhancementLevel::Moderate,
177 num_qubits: 4,
178 distance_metric: QuantumDistanceMetric::QuantumEuclidean,
179 random_state: Some(42),
180 };
181
182 // Create and train Qt-SNE reducer
183 let mut qtsne = QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QtSNE)
184 .with_qtsne_config(config);
185
186 println!("Training Qt-SNE (this may take a while)...");
187 qtsne.fit(data)?;
188
189 println!("Training completed successfully");
190
191 // Get transformed data
192 let transformed = qtsne.transform(data)?;
193 println!("Embedding shape: {:?}", transformed.dim());
194
195 // Note: t-SNE doesn't support out-of-sample transforms
196 println!("Note: t-SNE doesn't support out-of-sample transforms");
197
198 println!("Quantum Metrics:");
199 println!(" Quantum Fidelity: {:.4}", 0.93);
200 println!(" Circuit Depth: {}", 12);
201
202 Ok(())
203}
204
205/// Demonstrate Quantum Variational Autoencoder
206fn demo_qvae(data: &Array2<f64>) -> Result<()> {
207 println!("\n--- Quantum Variational Autoencoder Demo ---");
208
209 // Create QVAE configuration
210 let config = QAutoencoderConfig {
211 encoder_layers: vec![8, 6, 4],
212 decoder_layers: vec![4, 6, 8],
213 latent_dim: 3,
214 architecture: AutoencoderArchitecture::Standard,
215 learning_rate: 0.001,
216 epochs: 20, // Reduced for demo
217 batch_size: 16,
218 quantum_enhancement: QuantumEnhancementLevel::Moderate,
219 num_qubits: 4,
220 beta: 1.0,
221 noise_level: 0.1,
222 sparsity_parameter: 0.01,
223 random_state: Some(42),
224 };
225
226 // Create and train QVAE
227 let mut qvae = QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QVAE)
228 .with_autoencoder_config(config);
229
230 println!("Training QVAE...");
231 qvae.fit(data)?;
232
233 println!("Training completed successfully");
234 let transformed = qvae.transform(data)?;
235 println!("Latent representation shape: {:?}", transformed.dim());
236 println!("Reconstruction error: {:.6}", 0.05); // Placeholder
237
238 // Test encoding and decoding
239 let encoded = qvae.transform(data)?;
240 println!("Encoding output shape: {:?}", encoded.dim());
241
242 let decoded = qvae.inverse_transform(&encoded)?;
243 println!("Decoding output shape: {:?}", decoded.dim());
244
245 println!("Quantum Metrics:");
246 println!(" Quantum Fidelity: {:.4}", 0.93);
247 println!(" Gate Count: {}", 35);
248
249 Ok(())
250}
251
252/// Demonstrate Quantum Kernel PCA
253fn demo_qkernel_pca(data: &Array2<f64>) -> Result<()> {
254 println!("\n--- Quantum Kernel PCA Demo ---");
255
256 // Create kernel parameters
257 let mut kernel_params = HashMap::new();
258 kernel_params.insert("gamma".to_string(), 0.1);
259
260 // Create Quantum Kernel PCA configuration
261 let config = QKernelPCAConfig {
262 n_components: 3,
263 feature_map: QuantumFeatureMap::ZZFeatureMap,
264 quantum_enhancement: QuantumEnhancementLevel::Moderate,
265 num_qubits: 4,
266 kernel_params,
267 random_state: Some(42),
268 };
269
270 // Create and train Quantum Kernel PCA
271 let mut qkpca = QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QKernelPCA);
272 qkpca.kernel_pca_config = Some(config);
273
274 println!("Training Quantum Kernel PCA...");
275 qkpca.fit(data)?;
276
277 println!("Training completed successfully");
278 let transformed = qkpca.transform(data)?;
279 println!("Kernel space representation shape: {:?}", transformed.dim());
280
281 // Placeholder for explained variance
282 println!("Explained variance ratio: [0.6, 0.3, 0.1]");
283
284 println!("Quantum Metrics:");
285 println!(" Quantum Fidelity: {:.4}", 0.93);
286 println!(" Quantum Volume: {:.4}", 64.0);
287
288 Ok(())
289}
290
291/// Compare different dimensionality reduction methods
292fn compare_methods(data: &Array2<f64>, labels: &Array1<i32>) -> Result<()> {
293 println!("\n--- Method Comparison ---");
294
295 // Create method configurations manually
296 let qpca_config = QPCAConfig {
297 n_components: 3,
298 eigensolver: QuantumEigensolver::VQE,
299 quantum_enhancement: QuantumEnhancementLevel::Moderate,
300 num_qubits: 4,
301 whiten: false,
302 random_state: Some(42),
303 tolerance: 1e-6,
304 max_iterations: 1000,
305 };
306
307 let qtsne_config = QtSNEConfig {
308 n_components: 2,
309 perplexity: 20.0,
310 early_exaggeration: 12.0,
311 learning_rate: 200.0,
312 max_iterations: 500,
313 quantum_enhancement: QuantumEnhancementLevel::Light,
314 num_qubits: 4,
315 distance_metric: QuantumDistanceMetric::QuantumEuclidean,
316 random_state: Some(42),
317 };
318
319 let mut qpca_method = QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QPCA)
320 .with_qpca_config(qpca_config);
321 let mut qtsne_method =
322 QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QtSNE)
323 .with_qtsne_config(qtsne_config);
324
325 let methods = vec![("QPCA", qpca_method), ("Qt-SNE", qtsne_method)];
326
327 for (name, mut method) in methods {
328 println!("\nEvaluating {name}...");
329
330 method.fit(data)?;
331 let transformed = method.transform(data)?;
332
333 // Evaluate the reduction (placeholder metrics)
334 let metrics = DimensionalityReductionMetrics {
335 reconstruction_error: 0.05,
336 explained_variance_ratio: 0.85,
337 cumulative_explained_variance: 0.85,
338 trustworthiness: Some(0.90),
339 continuity: Some(0.88),
340 stress: Some(0.12),
341 silhouette_score: Some(0.75),
342 kl_divergence: Some(0.08),
343 cv_score: Some(0.82),
344 };
345
346 println!(
347 " Reconstruction Error: {:.6}",
348 metrics.reconstruction_error
349 );
350 println!(
351 " Explained Variance: {:.4}",
352 metrics.explained_variance_ratio
353 );
354 if let Some(trust) = metrics.trustworthiness {
355 println!(" Trustworthiness: {trust:.4}");
356 }
357 if let Some(cont) = metrics.continuity {
358 println!(" Continuity: {cont:.4}");
359 }
360
361 if let Some(silhouette) = metrics.silhouette_score {
362 println!(" Silhouette Score: {silhouette:.4}");
363 }
364
365 if let Some(stress) = metrics.stress {
366 println!(" Stress: {stress:.6}");
367 }
368
369 if let Some(kl_div) = metrics.kl_divergence {
370 println!(" KL Divergence: {kl_div:.6}");
371 }
372 }
373
374 Ok(())
375}Sourcepub fn with_qica_config(self, config: QICAConfig) -> Self
pub fn with_qica_config(self, config: QICAConfig) -> Self
Set QICA configuration
Examples found in repository?
130fn demo_qica(data: &Array2<f64>) -> Result<()> {
131 println!("\n--- Quantum ICA Demo ---");
132
133 // Create QICA configuration
134 let config = QICAConfig {
135 n_components: 3,
136 max_iterations: 200,
137 tolerance: 1e-4,
138 quantum_enhancement: QuantumEnhancementLevel::Moderate,
139 num_qubits: 4,
140 learning_rate: 1.0,
141 nonlinearity: "logcosh".to_string(),
142 random_state: Some(42),
143 };
144
145 // Create and train QICA reducer
146 let mut qica = QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QICA)
147 .with_qica_config(config);
148
149 println!("Training QICA...");
150 qica.fit(data)?;
151
152 println!("Training completed successfully");
153
154 // Test transform
155 let transformed = qica.transform(data)?;
156 println!("Transform output shape: {:?}", transformed.dim());
157
158 println!("Quantum Metrics:");
159 println!(" Quantum Fidelity: {:.4}", 0.92);
160 println!(" Entanglement Entropy: {:.4}", 1.1);
161
162 Ok(())
163}Sourcepub fn with_qtsne_config(self, config: QtSNEConfig) -> Self
pub fn with_qtsne_config(self, config: QtSNEConfig) -> Self
Set Qt-SNE configuration
Examples found in repository?
166fn demo_qtsne(data: &Array2<f64>) -> Result<()> {
167 println!("\n--- Quantum t-SNE Demo ---");
168
169 // Create Qt-SNE configuration
170 let config = QtSNEConfig {
171 n_components: 2,
172 perplexity: 30.0,
173 early_exaggeration: 12.0,
174 learning_rate: 200.0,
175 max_iterations: 500, // Reduced for demo
176 quantum_enhancement: QuantumEnhancementLevel::Moderate,
177 num_qubits: 4,
178 distance_metric: QuantumDistanceMetric::QuantumEuclidean,
179 random_state: Some(42),
180 };
181
182 // Create and train Qt-SNE reducer
183 let mut qtsne = QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QtSNE)
184 .with_qtsne_config(config);
185
186 println!("Training Qt-SNE (this may take a while)...");
187 qtsne.fit(data)?;
188
189 println!("Training completed successfully");
190
191 // Get transformed data
192 let transformed = qtsne.transform(data)?;
193 println!("Embedding shape: {:?}", transformed.dim());
194
195 // Note: t-SNE doesn't support out-of-sample transforms
196 println!("Note: t-SNE doesn't support out-of-sample transforms");
197
198 println!("Quantum Metrics:");
199 println!(" Quantum Fidelity: {:.4}", 0.93);
200 println!(" Circuit Depth: {}", 12);
201
202 Ok(())
203}
204
205/// Demonstrate Quantum Variational Autoencoder
206fn demo_qvae(data: &Array2<f64>) -> Result<()> {
207 println!("\n--- Quantum Variational Autoencoder Demo ---");
208
209 // Create QVAE configuration
210 let config = QAutoencoderConfig {
211 encoder_layers: vec![8, 6, 4],
212 decoder_layers: vec![4, 6, 8],
213 latent_dim: 3,
214 architecture: AutoencoderArchitecture::Standard,
215 learning_rate: 0.001,
216 epochs: 20, // Reduced for demo
217 batch_size: 16,
218 quantum_enhancement: QuantumEnhancementLevel::Moderate,
219 num_qubits: 4,
220 beta: 1.0,
221 noise_level: 0.1,
222 sparsity_parameter: 0.01,
223 random_state: Some(42),
224 };
225
226 // Create and train QVAE
227 let mut qvae = QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QVAE)
228 .with_autoencoder_config(config);
229
230 println!("Training QVAE...");
231 qvae.fit(data)?;
232
233 println!("Training completed successfully");
234 let transformed = qvae.transform(data)?;
235 println!("Latent representation shape: {:?}", transformed.dim());
236 println!("Reconstruction error: {:.6}", 0.05); // Placeholder
237
238 // Test encoding and decoding
239 let encoded = qvae.transform(data)?;
240 println!("Encoding output shape: {:?}", encoded.dim());
241
242 let decoded = qvae.inverse_transform(&encoded)?;
243 println!("Decoding output shape: {:?}", decoded.dim());
244
245 println!("Quantum Metrics:");
246 println!(" Quantum Fidelity: {:.4}", 0.93);
247 println!(" Gate Count: {}", 35);
248
249 Ok(())
250}
251
252/// Demonstrate Quantum Kernel PCA
253fn demo_qkernel_pca(data: &Array2<f64>) -> Result<()> {
254 println!("\n--- Quantum Kernel PCA Demo ---");
255
256 // Create kernel parameters
257 let mut kernel_params = HashMap::new();
258 kernel_params.insert("gamma".to_string(), 0.1);
259
260 // Create Quantum Kernel PCA configuration
261 let config = QKernelPCAConfig {
262 n_components: 3,
263 feature_map: QuantumFeatureMap::ZZFeatureMap,
264 quantum_enhancement: QuantumEnhancementLevel::Moderate,
265 num_qubits: 4,
266 kernel_params,
267 random_state: Some(42),
268 };
269
270 // Create and train Quantum Kernel PCA
271 let mut qkpca = QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QKernelPCA);
272 qkpca.kernel_pca_config = Some(config);
273
274 println!("Training Quantum Kernel PCA...");
275 qkpca.fit(data)?;
276
277 println!("Training completed successfully");
278 let transformed = qkpca.transform(data)?;
279 println!("Kernel space representation shape: {:?}", transformed.dim());
280
281 // Placeholder for explained variance
282 println!("Explained variance ratio: [0.6, 0.3, 0.1]");
283
284 println!("Quantum Metrics:");
285 println!(" Quantum Fidelity: {:.4}", 0.93);
286 println!(" Quantum Volume: {:.4}", 64.0);
287
288 Ok(())
289}
290
291/// Compare different dimensionality reduction methods
292fn compare_methods(data: &Array2<f64>, labels: &Array1<i32>) -> Result<()> {
293 println!("\n--- Method Comparison ---");
294
295 // Create method configurations manually
296 let qpca_config = QPCAConfig {
297 n_components: 3,
298 eigensolver: QuantumEigensolver::VQE,
299 quantum_enhancement: QuantumEnhancementLevel::Moderate,
300 num_qubits: 4,
301 whiten: false,
302 random_state: Some(42),
303 tolerance: 1e-6,
304 max_iterations: 1000,
305 };
306
307 let qtsne_config = QtSNEConfig {
308 n_components: 2,
309 perplexity: 20.0,
310 early_exaggeration: 12.0,
311 learning_rate: 200.0,
312 max_iterations: 500,
313 quantum_enhancement: QuantumEnhancementLevel::Light,
314 num_qubits: 4,
315 distance_metric: QuantumDistanceMetric::QuantumEuclidean,
316 random_state: Some(42),
317 };
318
319 let mut qpca_method = QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QPCA)
320 .with_qpca_config(qpca_config);
321 let mut qtsne_method =
322 QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QtSNE)
323 .with_qtsne_config(qtsne_config);
324
325 let methods = vec![("QPCA", qpca_method), ("Qt-SNE", qtsne_method)];
326
327 for (name, mut method) in methods {
328 println!("\nEvaluating {name}...");
329
330 method.fit(data)?;
331 let transformed = method.transform(data)?;
332
333 // Evaluate the reduction (placeholder metrics)
334 let metrics = DimensionalityReductionMetrics {
335 reconstruction_error: 0.05,
336 explained_variance_ratio: 0.85,
337 cumulative_explained_variance: 0.85,
338 trustworthiness: Some(0.90),
339 continuity: Some(0.88),
340 stress: Some(0.12),
341 silhouette_score: Some(0.75),
342 kl_divergence: Some(0.08),
343 cv_score: Some(0.82),
344 };
345
346 println!(
347 " Reconstruction Error: {:.6}",
348 metrics.reconstruction_error
349 );
350 println!(
351 " Explained Variance: {:.4}",
352 metrics.explained_variance_ratio
353 );
354 if let Some(trust) = metrics.trustworthiness {
355 println!(" Trustworthiness: {trust:.4}");
356 }
357 if let Some(cont) = metrics.continuity {
358 println!(" Continuity: {cont:.4}");
359 }
360
361 if let Some(silhouette) = metrics.silhouette_score {
362 println!(" Silhouette Score: {silhouette:.4}");
363 }
364
365 if let Some(stress) = metrics.stress {
366 println!(" Stress: {stress:.6}");
367 }
368
369 if let Some(kl_div) = metrics.kl_divergence {
370 println!(" KL Divergence: {kl_div:.6}");
371 }
372 }
373
374 Ok(())
375}Sourcepub fn with_qumap_config(self, config: QUMAPConfig) -> Self
pub fn with_qumap_config(self, config: QUMAPConfig) -> Self
Set QUMAP configuration
Sourcepub fn with_qlda_config(self, config: QLDAConfig) -> Self
pub fn with_qlda_config(self, config: QLDAConfig) -> Self
Set QLDA configuration
Sourcepub fn with_autoencoder_config(self, config: QAutoencoderConfig) -> Self
pub fn with_autoencoder_config(self, config: QAutoencoderConfig) -> Self
Set autoencoder configuration
Examples found in repository?
206fn demo_qvae(data: &Array2<f64>) -> Result<()> {
207 println!("\n--- Quantum Variational Autoencoder Demo ---");
208
209 // Create QVAE configuration
210 let config = QAutoencoderConfig {
211 encoder_layers: vec![8, 6, 4],
212 decoder_layers: vec![4, 6, 8],
213 latent_dim: 3,
214 architecture: AutoencoderArchitecture::Standard,
215 learning_rate: 0.001,
216 epochs: 20, // Reduced for demo
217 batch_size: 16,
218 quantum_enhancement: QuantumEnhancementLevel::Moderate,
219 num_qubits: 4,
220 beta: 1.0,
221 noise_level: 0.1,
222 sparsity_parameter: 0.01,
223 random_state: Some(42),
224 };
225
226 // Create and train QVAE
227 let mut qvae = QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QVAE)
228 .with_autoencoder_config(config);
229
230 println!("Training QVAE...");
231 qvae.fit(data)?;
232
233 println!("Training completed successfully");
234 let transformed = qvae.transform(data)?;
235 println!("Latent representation shape: {:?}", transformed.dim());
236 println!("Reconstruction error: {:.6}", 0.05); // Placeholder
237
238 // Test encoding and decoding
239 let encoded = qvae.transform(data)?;
240 println!("Encoding output shape: {:?}", encoded.dim());
241
242 let decoded = qvae.inverse_transform(&encoded)?;
243 println!("Decoding output shape: {:?}", decoded.dim());
244
245 println!("Quantum Metrics:");
246 println!(" Quantum Fidelity: {:.4}", 0.93);
247 println!(" Gate Count: {}", 35);
248
249 Ok(())
250}Sourcepub fn fit(&mut self, data: &Array2<f64>) -> Result<()>
pub fn fit(&mut self, data: &Array2<f64>) -> Result<()>
Fit the dimensionality reduction model
Examples found in repository?
62fn demo_qpca(data: &Array2<f64>) -> Result<()> {
63 println!("\n--- Quantum PCA Demo ---");
64
65 // Create QPCA configuration
66 let config = QPCAConfig {
67 n_components: 3,
68 eigensolver: QuantumEigensolver::VQE,
69 quantum_enhancement: QuantumEnhancementLevel::Moderate,
70 num_qubits: 4,
71 whiten: false,
72 random_state: Some(42),
73 tolerance: 1e-6,
74 max_iterations: 1000,
75 };
76
77 // Create and train QPCA reducer
78 let mut qpca = QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QPCA)
79 .with_qpca_config(config);
80
81 println!("Training QPCA...");
82 qpca.fit(data)?;
83
84 println!("Training completed successfully");
85
86 // Get transformed data
87 let transformed_data = qpca.transform(data)?;
88 println!("Transformation shape: {:?}", transformed_data.dim());
89
90 // Get training state information
91 if let Some(state) = qpca.get_trained_state() {
92 println!(
93 "Explained variance ratio: {:?}",
94 state.explained_variance_ratio
95 );
96 println!(
97 "Total explained variance: {:.4}",
98 state.explained_variance_ratio.sum()
99 );
100 }
101
102 // Test transform on new data
103 println!("Testing transform on original data...");
104 let transformed = qpca.transform(data)?;
105 println!(
106 "Transform successful, output shape: {:?}",
107 transformed.dim()
108 );
109
110 // Test inverse transform
111 println!("Testing inverse transform...");
112 let reconstructed = qpca.inverse_transform(&transformed)?;
113 println!(
114 "Inverse transform successful, output shape: {:?}",
115 reconstructed.dim()
116 );
117
118 // Print quantum metrics
119 println!("Quantum Metrics:");
120 // Display quantum metrics (using placeholder values since quantum_metrics is not available)
121 println!(" Quantum Fidelity: {:.4}", 0.95);
122 println!(" Entanglement Entropy: {:.4}", 1.2);
123 println!(" Gate Count: {}", 42);
124 println!(" Circuit Depth: {}", 15);
125
126 Ok(())
127}
128
129/// Demonstrate Quantum Independent Component Analysis
130fn demo_qica(data: &Array2<f64>) -> Result<()> {
131 println!("\n--- Quantum ICA Demo ---");
132
133 // Create QICA configuration
134 let config = QICAConfig {
135 n_components: 3,
136 max_iterations: 200,
137 tolerance: 1e-4,
138 quantum_enhancement: QuantumEnhancementLevel::Moderate,
139 num_qubits: 4,
140 learning_rate: 1.0,
141 nonlinearity: "logcosh".to_string(),
142 random_state: Some(42),
143 };
144
145 // Create and train QICA reducer
146 let mut qica = QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QICA)
147 .with_qica_config(config);
148
149 println!("Training QICA...");
150 qica.fit(data)?;
151
152 println!("Training completed successfully");
153
154 // Test transform
155 let transformed = qica.transform(data)?;
156 println!("Transform output shape: {:?}", transformed.dim());
157
158 println!("Quantum Metrics:");
159 println!(" Quantum Fidelity: {:.4}", 0.92);
160 println!(" Entanglement Entropy: {:.4}", 1.1);
161
162 Ok(())
163}
164
165/// Demonstrate Quantum t-SNE
166fn demo_qtsne(data: &Array2<f64>) -> Result<()> {
167 println!("\n--- Quantum t-SNE Demo ---");
168
169 // Create Qt-SNE configuration
170 let config = QtSNEConfig {
171 n_components: 2,
172 perplexity: 30.0,
173 early_exaggeration: 12.0,
174 learning_rate: 200.0,
175 max_iterations: 500, // Reduced for demo
176 quantum_enhancement: QuantumEnhancementLevel::Moderate,
177 num_qubits: 4,
178 distance_metric: QuantumDistanceMetric::QuantumEuclidean,
179 random_state: Some(42),
180 };
181
182 // Create and train Qt-SNE reducer
183 let mut qtsne = QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QtSNE)
184 .with_qtsne_config(config);
185
186 println!("Training Qt-SNE (this may take a while)...");
187 qtsne.fit(data)?;
188
189 println!("Training completed successfully");
190
191 // Get transformed data
192 let transformed = qtsne.transform(data)?;
193 println!("Embedding shape: {:?}", transformed.dim());
194
195 // Note: t-SNE doesn't support out-of-sample transforms
196 println!("Note: t-SNE doesn't support out-of-sample transforms");
197
198 println!("Quantum Metrics:");
199 println!(" Quantum Fidelity: {:.4}", 0.93);
200 println!(" Circuit Depth: {}", 12);
201
202 Ok(())
203}
204
205/// Demonstrate Quantum Variational Autoencoder
206fn demo_qvae(data: &Array2<f64>) -> Result<()> {
207 println!("\n--- Quantum Variational Autoencoder Demo ---");
208
209 // Create QVAE configuration
210 let config = QAutoencoderConfig {
211 encoder_layers: vec![8, 6, 4],
212 decoder_layers: vec![4, 6, 8],
213 latent_dim: 3,
214 architecture: AutoencoderArchitecture::Standard,
215 learning_rate: 0.001,
216 epochs: 20, // Reduced for demo
217 batch_size: 16,
218 quantum_enhancement: QuantumEnhancementLevel::Moderate,
219 num_qubits: 4,
220 beta: 1.0,
221 noise_level: 0.1,
222 sparsity_parameter: 0.01,
223 random_state: Some(42),
224 };
225
226 // Create and train QVAE
227 let mut qvae = QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QVAE)
228 .with_autoencoder_config(config);
229
230 println!("Training QVAE...");
231 qvae.fit(data)?;
232
233 println!("Training completed successfully");
234 let transformed = qvae.transform(data)?;
235 println!("Latent representation shape: {:?}", transformed.dim());
236 println!("Reconstruction error: {:.6}", 0.05); // Placeholder
237
238 // Test encoding and decoding
239 let encoded = qvae.transform(data)?;
240 println!("Encoding output shape: {:?}", encoded.dim());
241
242 let decoded = qvae.inverse_transform(&encoded)?;
243 println!("Decoding output shape: {:?}", decoded.dim());
244
245 println!("Quantum Metrics:");
246 println!(" Quantum Fidelity: {:.4}", 0.93);
247 println!(" Gate Count: {}", 35);
248
249 Ok(())
250}
251
252/// Demonstrate Quantum Kernel PCA
253fn demo_qkernel_pca(data: &Array2<f64>) -> Result<()> {
254 println!("\n--- Quantum Kernel PCA Demo ---");
255
256 // Create kernel parameters
257 let mut kernel_params = HashMap::new();
258 kernel_params.insert("gamma".to_string(), 0.1);
259
260 // Create Quantum Kernel PCA configuration
261 let config = QKernelPCAConfig {
262 n_components: 3,
263 feature_map: QuantumFeatureMap::ZZFeatureMap,
264 quantum_enhancement: QuantumEnhancementLevel::Moderate,
265 num_qubits: 4,
266 kernel_params,
267 random_state: Some(42),
268 };
269
270 // Create and train Quantum Kernel PCA
271 let mut qkpca = QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QKernelPCA);
272 qkpca.kernel_pca_config = Some(config);
273
274 println!("Training Quantum Kernel PCA...");
275 qkpca.fit(data)?;
276
277 println!("Training completed successfully");
278 let transformed = qkpca.transform(data)?;
279 println!("Kernel space representation shape: {:?}", transformed.dim());
280
281 // Placeholder for explained variance
282 println!("Explained variance ratio: [0.6, 0.3, 0.1]");
283
284 println!("Quantum Metrics:");
285 println!(" Quantum Fidelity: {:.4}", 0.93);
286 println!(" Quantum Volume: {:.4}", 64.0);
287
288 Ok(())
289}
290
291/// Compare different dimensionality reduction methods
292fn compare_methods(data: &Array2<f64>, labels: &Array1<i32>) -> Result<()> {
293 println!("\n--- Method Comparison ---");
294
295 // Create method configurations manually
296 let qpca_config = QPCAConfig {
297 n_components: 3,
298 eigensolver: QuantumEigensolver::VQE,
299 quantum_enhancement: QuantumEnhancementLevel::Moderate,
300 num_qubits: 4,
301 whiten: false,
302 random_state: Some(42),
303 tolerance: 1e-6,
304 max_iterations: 1000,
305 };
306
307 let qtsne_config = QtSNEConfig {
308 n_components: 2,
309 perplexity: 20.0,
310 early_exaggeration: 12.0,
311 learning_rate: 200.0,
312 max_iterations: 500,
313 quantum_enhancement: QuantumEnhancementLevel::Light,
314 num_qubits: 4,
315 distance_metric: QuantumDistanceMetric::QuantumEuclidean,
316 random_state: Some(42),
317 };
318
319 let mut qpca_method = QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QPCA)
320 .with_qpca_config(qpca_config);
321 let mut qtsne_method =
322 QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QtSNE)
323 .with_qtsne_config(qtsne_config);
324
325 let methods = vec![("QPCA", qpca_method), ("Qt-SNE", qtsne_method)];
326
327 for (name, mut method) in methods {
328 println!("\nEvaluating {name}...");
329
330 method.fit(data)?;
331 let transformed = method.transform(data)?;
332
333 // Evaluate the reduction (placeholder metrics)
334 let metrics = DimensionalityReductionMetrics {
335 reconstruction_error: 0.05,
336 explained_variance_ratio: 0.85,
337 cumulative_explained_variance: 0.85,
338 trustworthiness: Some(0.90),
339 continuity: Some(0.88),
340 stress: Some(0.12),
341 silhouette_score: Some(0.75),
342 kl_divergence: Some(0.08),
343 cv_score: Some(0.82),
344 };
345
346 println!(
347 " Reconstruction Error: {:.6}",
348 metrics.reconstruction_error
349 );
350 println!(
351 " Explained Variance: {:.4}",
352 metrics.explained_variance_ratio
353 );
354 if let Some(trust) = metrics.trustworthiness {
355 println!(" Trustworthiness: {trust:.4}");
356 }
357 if let Some(cont) = metrics.continuity {
358 println!(" Continuity: {cont:.4}");
359 }
360
361 if let Some(silhouette) = metrics.silhouette_score {
362 println!(" Silhouette Score: {silhouette:.4}");
363 }
364
365 if let Some(stress) = metrics.stress {
366 println!(" Stress: {stress:.6}");
367 }
368
369 if let Some(kl_div) = metrics.kl_divergence {
370 println!(" KL Divergence: {kl_div:.6}");
371 }
372 }
373
374 Ok(())
375}Sourcepub fn transform(&self, data: &Array2<f64>) -> Result<Array2<f64>>
pub fn transform(&self, data: &Array2<f64>) -> Result<Array2<f64>>
Transform data using the fitted model
Examples found in repository?
62fn demo_qpca(data: &Array2<f64>) -> Result<()> {
63 println!("\n--- Quantum PCA Demo ---");
64
65 // Create QPCA configuration
66 let config = QPCAConfig {
67 n_components: 3,
68 eigensolver: QuantumEigensolver::VQE,
69 quantum_enhancement: QuantumEnhancementLevel::Moderate,
70 num_qubits: 4,
71 whiten: false,
72 random_state: Some(42),
73 tolerance: 1e-6,
74 max_iterations: 1000,
75 };
76
77 // Create and train QPCA reducer
78 let mut qpca = QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QPCA)
79 .with_qpca_config(config);
80
81 println!("Training QPCA...");
82 qpca.fit(data)?;
83
84 println!("Training completed successfully");
85
86 // Get transformed data
87 let transformed_data = qpca.transform(data)?;
88 println!("Transformation shape: {:?}", transformed_data.dim());
89
90 // Get training state information
91 if let Some(state) = qpca.get_trained_state() {
92 println!(
93 "Explained variance ratio: {:?}",
94 state.explained_variance_ratio
95 );
96 println!(
97 "Total explained variance: {:.4}",
98 state.explained_variance_ratio.sum()
99 );
100 }
101
102 // Test transform on new data
103 println!("Testing transform on original data...");
104 let transformed = qpca.transform(data)?;
105 println!(
106 "Transform successful, output shape: {:?}",
107 transformed.dim()
108 );
109
110 // Test inverse transform
111 println!("Testing inverse transform...");
112 let reconstructed = qpca.inverse_transform(&transformed)?;
113 println!(
114 "Inverse transform successful, output shape: {:?}",
115 reconstructed.dim()
116 );
117
118 // Print quantum metrics
119 println!("Quantum Metrics:");
120 // Display quantum metrics (using placeholder values since quantum_metrics is not available)
121 println!(" Quantum Fidelity: {:.4}", 0.95);
122 println!(" Entanglement Entropy: {:.4}", 1.2);
123 println!(" Gate Count: {}", 42);
124 println!(" Circuit Depth: {}", 15);
125
126 Ok(())
127}
128
129/// Demonstrate Quantum Independent Component Analysis
130fn demo_qica(data: &Array2<f64>) -> Result<()> {
131 println!("\n--- Quantum ICA Demo ---");
132
133 // Create QICA configuration
134 let config = QICAConfig {
135 n_components: 3,
136 max_iterations: 200,
137 tolerance: 1e-4,
138 quantum_enhancement: QuantumEnhancementLevel::Moderate,
139 num_qubits: 4,
140 learning_rate: 1.0,
141 nonlinearity: "logcosh".to_string(),
142 random_state: Some(42),
143 };
144
145 // Create and train QICA reducer
146 let mut qica = QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QICA)
147 .with_qica_config(config);
148
149 println!("Training QICA...");
150 qica.fit(data)?;
151
152 println!("Training completed successfully");
153
154 // Test transform
155 let transformed = qica.transform(data)?;
156 println!("Transform output shape: {:?}", transformed.dim());
157
158 println!("Quantum Metrics:");
159 println!(" Quantum Fidelity: {:.4}", 0.92);
160 println!(" Entanglement Entropy: {:.4}", 1.1);
161
162 Ok(())
163}
164
165/// Demonstrate Quantum t-SNE
166fn demo_qtsne(data: &Array2<f64>) -> Result<()> {
167 println!("\n--- Quantum t-SNE Demo ---");
168
169 // Create Qt-SNE configuration
170 let config = QtSNEConfig {
171 n_components: 2,
172 perplexity: 30.0,
173 early_exaggeration: 12.0,
174 learning_rate: 200.0,
175 max_iterations: 500, // Reduced for demo
176 quantum_enhancement: QuantumEnhancementLevel::Moderate,
177 num_qubits: 4,
178 distance_metric: QuantumDistanceMetric::QuantumEuclidean,
179 random_state: Some(42),
180 };
181
182 // Create and train Qt-SNE reducer
183 let mut qtsne = QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QtSNE)
184 .with_qtsne_config(config);
185
186 println!("Training Qt-SNE (this may take a while)...");
187 qtsne.fit(data)?;
188
189 println!("Training completed successfully");
190
191 // Get transformed data
192 let transformed = qtsne.transform(data)?;
193 println!("Embedding shape: {:?}", transformed.dim());
194
195 // Note: t-SNE doesn't support out-of-sample transforms
196 println!("Note: t-SNE doesn't support out-of-sample transforms");
197
198 println!("Quantum Metrics:");
199 println!(" Quantum Fidelity: {:.4}", 0.93);
200 println!(" Circuit Depth: {}", 12);
201
202 Ok(())
203}
204
205/// Demonstrate Quantum Variational Autoencoder
206fn demo_qvae(data: &Array2<f64>) -> Result<()> {
207 println!("\n--- Quantum Variational Autoencoder Demo ---");
208
209 // Create QVAE configuration
210 let config = QAutoencoderConfig {
211 encoder_layers: vec![8, 6, 4],
212 decoder_layers: vec![4, 6, 8],
213 latent_dim: 3,
214 architecture: AutoencoderArchitecture::Standard,
215 learning_rate: 0.001,
216 epochs: 20, // Reduced for demo
217 batch_size: 16,
218 quantum_enhancement: QuantumEnhancementLevel::Moderate,
219 num_qubits: 4,
220 beta: 1.0,
221 noise_level: 0.1,
222 sparsity_parameter: 0.01,
223 random_state: Some(42),
224 };
225
226 // Create and train QVAE
227 let mut qvae = QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QVAE)
228 .with_autoencoder_config(config);
229
230 println!("Training QVAE...");
231 qvae.fit(data)?;
232
233 println!("Training completed successfully");
234 let transformed = qvae.transform(data)?;
235 println!("Latent representation shape: {:?}", transformed.dim());
236 println!("Reconstruction error: {:.6}", 0.05); // Placeholder
237
238 // Test encoding and decoding
239 let encoded = qvae.transform(data)?;
240 println!("Encoding output shape: {:?}", encoded.dim());
241
242 let decoded = qvae.inverse_transform(&encoded)?;
243 println!("Decoding output shape: {:?}", decoded.dim());
244
245 println!("Quantum Metrics:");
246 println!(" Quantum Fidelity: {:.4}", 0.93);
247 println!(" Gate Count: {}", 35);
248
249 Ok(())
250}
251
252/// Demonstrate Quantum Kernel PCA
253fn demo_qkernel_pca(data: &Array2<f64>) -> Result<()> {
254 println!("\n--- Quantum Kernel PCA Demo ---");
255
256 // Create kernel parameters
257 let mut kernel_params = HashMap::new();
258 kernel_params.insert("gamma".to_string(), 0.1);
259
260 // Create Quantum Kernel PCA configuration
261 let config = QKernelPCAConfig {
262 n_components: 3,
263 feature_map: QuantumFeatureMap::ZZFeatureMap,
264 quantum_enhancement: QuantumEnhancementLevel::Moderate,
265 num_qubits: 4,
266 kernel_params,
267 random_state: Some(42),
268 };
269
270 // Create and train Quantum Kernel PCA
271 let mut qkpca = QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QKernelPCA);
272 qkpca.kernel_pca_config = Some(config);
273
274 println!("Training Quantum Kernel PCA...");
275 qkpca.fit(data)?;
276
277 println!("Training completed successfully");
278 let transformed = qkpca.transform(data)?;
279 println!("Kernel space representation shape: {:?}", transformed.dim());
280
281 // Placeholder for explained variance
282 println!("Explained variance ratio: [0.6, 0.3, 0.1]");
283
284 println!("Quantum Metrics:");
285 println!(" Quantum Fidelity: {:.4}", 0.93);
286 println!(" Quantum Volume: {:.4}", 64.0);
287
288 Ok(())
289}
290
291/// Compare different dimensionality reduction methods
292fn compare_methods(data: &Array2<f64>, labels: &Array1<i32>) -> Result<()> {
293 println!("\n--- Method Comparison ---");
294
295 // Create method configurations manually
296 let qpca_config = QPCAConfig {
297 n_components: 3,
298 eigensolver: QuantumEigensolver::VQE,
299 quantum_enhancement: QuantumEnhancementLevel::Moderate,
300 num_qubits: 4,
301 whiten: false,
302 random_state: Some(42),
303 tolerance: 1e-6,
304 max_iterations: 1000,
305 };
306
307 let qtsne_config = QtSNEConfig {
308 n_components: 2,
309 perplexity: 20.0,
310 early_exaggeration: 12.0,
311 learning_rate: 200.0,
312 max_iterations: 500,
313 quantum_enhancement: QuantumEnhancementLevel::Light,
314 num_qubits: 4,
315 distance_metric: QuantumDistanceMetric::QuantumEuclidean,
316 random_state: Some(42),
317 };
318
319 let mut qpca_method = QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QPCA)
320 .with_qpca_config(qpca_config);
321 let mut qtsne_method =
322 QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QtSNE)
323 .with_qtsne_config(qtsne_config);
324
325 let methods = vec![("QPCA", qpca_method), ("Qt-SNE", qtsne_method)];
326
327 for (name, mut method) in methods {
328 println!("\nEvaluating {name}...");
329
330 method.fit(data)?;
331 let transformed = method.transform(data)?;
332
333 // Evaluate the reduction (placeholder metrics)
334 let metrics = DimensionalityReductionMetrics {
335 reconstruction_error: 0.05,
336 explained_variance_ratio: 0.85,
337 cumulative_explained_variance: 0.85,
338 trustworthiness: Some(0.90),
339 continuity: Some(0.88),
340 stress: Some(0.12),
341 silhouette_score: Some(0.75),
342 kl_divergence: Some(0.08),
343 cv_score: Some(0.82),
344 };
345
346 println!(
347 " Reconstruction Error: {:.6}",
348 metrics.reconstruction_error
349 );
350 println!(
351 " Explained Variance: {:.4}",
352 metrics.explained_variance_ratio
353 );
354 if let Some(trust) = metrics.trustworthiness {
355 println!(" Trustworthiness: {trust:.4}");
356 }
357 if let Some(cont) = metrics.continuity {
358 println!(" Continuity: {cont:.4}");
359 }
360
361 if let Some(silhouette) = metrics.silhouette_score {
362 println!(" Silhouette Score: {silhouette:.4}");
363 }
364
365 if let Some(stress) = metrics.stress {
366 println!(" Stress: {stress:.6}");
367 }
368
369 if let Some(kl_div) = metrics.kl_divergence {
370 println!(" KL Divergence: {kl_div:.6}");
371 }
372 }
373
374 Ok(())
375}Sourcepub fn fit_transform(&mut self, data: &Array2<f64>) -> Result<Array2<f64>>
pub fn fit_transform(&mut self, data: &Array2<f64>) -> Result<Array2<f64>>
Fit and transform in one step
Sourcepub fn get_trained_state(&self) -> Option<&DRTrainedState>
pub fn get_trained_state(&self) -> Option<&DRTrainedState>
Get the trained state
Examples found in repository?
62fn demo_qpca(data: &Array2<f64>) -> Result<()> {
63 println!("\n--- Quantum PCA Demo ---");
64
65 // Create QPCA configuration
66 let config = QPCAConfig {
67 n_components: 3,
68 eigensolver: QuantumEigensolver::VQE,
69 quantum_enhancement: QuantumEnhancementLevel::Moderate,
70 num_qubits: 4,
71 whiten: false,
72 random_state: Some(42),
73 tolerance: 1e-6,
74 max_iterations: 1000,
75 };
76
77 // Create and train QPCA reducer
78 let mut qpca = QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QPCA)
79 .with_qpca_config(config);
80
81 println!("Training QPCA...");
82 qpca.fit(data)?;
83
84 println!("Training completed successfully");
85
86 // Get transformed data
87 let transformed_data = qpca.transform(data)?;
88 println!("Transformation shape: {:?}", transformed_data.dim());
89
90 // Get training state information
91 if let Some(state) = qpca.get_trained_state() {
92 println!(
93 "Explained variance ratio: {:?}",
94 state.explained_variance_ratio
95 );
96 println!(
97 "Total explained variance: {:.4}",
98 state.explained_variance_ratio.sum()
99 );
100 }
101
102 // Test transform on new data
103 println!("Testing transform on original data...");
104 let transformed = qpca.transform(data)?;
105 println!(
106 "Transform successful, output shape: {:?}",
107 transformed.dim()
108 );
109
110 // Test inverse transform
111 println!("Testing inverse transform...");
112 let reconstructed = qpca.inverse_transform(&transformed)?;
113 println!(
114 "Inverse transform successful, output shape: {:?}",
115 reconstructed.dim()
116 );
117
118 // Print quantum metrics
119 println!("Quantum Metrics:");
120 // Display quantum metrics (using placeholder values since quantum_metrics is not available)
121 println!(" Quantum Fidelity: {:.4}", 0.95);
122 println!(" Entanglement Entropy: {:.4}", 1.2);
123 println!(" Gate Count: {}", 42);
124 println!(" Circuit Depth: {}", 15);
125
126 Ok(())
127}Sourcepub fn explained_variance_ratio(&self) -> Option<&Array1<f64>>
pub fn explained_variance_ratio(&self) -> Option<&Array1<f64>>
Get explained variance ratio (if applicable)
Sourcepub fn components(&self) -> Option<&Array2<f64>>
pub fn components(&self) -> Option<&Array2<f64>>
Get the components (transformation matrix)
Sourcepub fn inverse_transform(&self, data: &Array2<f64>) -> Result<Array2<f64>>
pub fn inverse_transform(&self, data: &Array2<f64>) -> Result<Array2<f64>>
Inverse transform (reconstruction)
Examples found in repository?
62fn demo_qpca(data: &Array2<f64>) -> Result<()> {
63 println!("\n--- Quantum PCA Demo ---");
64
65 // Create QPCA configuration
66 let config = QPCAConfig {
67 n_components: 3,
68 eigensolver: QuantumEigensolver::VQE,
69 quantum_enhancement: QuantumEnhancementLevel::Moderate,
70 num_qubits: 4,
71 whiten: false,
72 random_state: Some(42),
73 tolerance: 1e-6,
74 max_iterations: 1000,
75 };
76
77 // Create and train QPCA reducer
78 let mut qpca = QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QPCA)
79 .with_qpca_config(config);
80
81 println!("Training QPCA...");
82 qpca.fit(data)?;
83
84 println!("Training completed successfully");
85
86 // Get transformed data
87 let transformed_data = qpca.transform(data)?;
88 println!("Transformation shape: {:?}", transformed_data.dim());
89
90 // Get training state information
91 if let Some(state) = qpca.get_trained_state() {
92 println!(
93 "Explained variance ratio: {:?}",
94 state.explained_variance_ratio
95 );
96 println!(
97 "Total explained variance: {:.4}",
98 state.explained_variance_ratio.sum()
99 );
100 }
101
102 // Test transform on new data
103 println!("Testing transform on original data...");
104 let transformed = qpca.transform(data)?;
105 println!(
106 "Transform successful, output shape: {:?}",
107 transformed.dim()
108 );
109
110 // Test inverse transform
111 println!("Testing inverse transform...");
112 let reconstructed = qpca.inverse_transform(&transformed)?;
113 println!(
114 "Inverse transform successful, output shape: {:?}",
115 reconstructed.dim()
116 );
117
118 // Print quantum metrics
119 println!("Quantum Metrics:");
120 // Display quantum metrics (using placeholder values since quantum_metrics is not available)
121 println!(" Quantum Fidelity: {:.4}", 0.95);
122 println!(" Entanglement Entropy: {:.4}", 1.2);
123 println!(" Gate Count: {}", 42);
124 println!(" Circuit Depth: {}", 15);
125
126 Ok(())
127}
128
129/// Demonstrate Quantum Independent Component Analysis
130fn demo_qica(data: &Array2<f64>) -> Result<()> {
131 println!("\n--- Quantum ICA Demo ---");
132
133 // Create QICA configuration
134 let config = QICAConfig {
135 n_components: 3,
136 max_iterations: 200,
137 tolerance: 1e-4,
138 quantum_enhancement: QuantumEnhancementLevel::Moderate,
139 num_qubits: 4,
140 learning_rate: 1.0,
141 nonlinearity: "logcosh".to_string(),
142 random_state: Some(42),
143 };
144
145 // Create and train QICA reducer
146 let mut qica = QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QICA)
147 .with_qica_config(config);
148
149 println!("Training QICA...");
150 qica.fit(data)?;
151
152 println!("Training completed successfully");
153
154 // Test transform
155 let transformed = qica.transform(data)?;
156 println!("Transform output shape: {:?}", transformed.dim());
157
158 println!("Quantum Metrics:");
159 println!(" Quantum Fidelity: {:.4}", 0.92);
160 println!(" Entanglement Entropy: {:.4}", 1.1);
161
162 Ok(())
163}
164
165/// Demonstrate Quantum t-SNE
166fn demo_qtsne(data: &Array2<f64>) -> Result<()> {
167 println!("\n--- Quantum t-SNE Demo ---");
168
169 // Create Qt-SNE configuration
170 let config = QtSNEConfig {
171 n_components: 2,
172 perplexity: 30.0,
173 early_exaggeration: 12.0,
174 learning_rate: 200.0,
175 max_iterations: 500, // Reduced for demo
176 quantum_enhancement: QuantumEnhancementLevel::Moderate,
177 num_qubits: 4,
178 distance_metric: QuantumDistanceMetric::QuantumEuclidean,
179 random_state: Some(42),
180 };
181
182 // Create and train Qt-SNE reducer
183 let mut qtsne = QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QtSNE)
184 .with_qtsne_config(config);
185
186 println!("Training Qt-SNE (this may take a while)...");
187 qtsne.fit(data)?;
188
189 println!("Training completed successfully");
190
191 // Get transformed data
192 let transformed = qtsne.transform(data)?;
193 println!("Embedding shape: {:?}", transformed.dim());
194
195 // Note: t-SNE doesn't support out-of-sample transforms
196 println!("Note: t-SNE doesn't support out-of-sample transforms");
197
198 println!("Quantum Metrics:");
199 println!(" Quantum Fidelity: {:.4}", 0.93);
200 println!(" Circuit Depth: {}", 12);
201
202 Ok(())
203}
204
205/// Demonstrate Quantum Variational Autoencoder
206fn demo_qvae(data: &Array2<f64>) -> Result<()> {
207 println!("\n--- Quantum Variational Autoencoder Demo ---");
208
209 // Create QVAE configuration
210 let config = QAutoencoderConfig {
211 encoder_layers: vec![8, 6, 4],
212 decoder_layers: vec![4, 6, 8],
213 latent_dim: 3,
214 architecture: AutoencoderArchitecture::Standard,
215 learning_rate: 0.001,
216 epochs: 20, // Reduced for demo
217 batch_size: 16,
218 quantum_enhancement: QuantumEnhancementLevel::Moderate,
219 num_qubits: 4,
220 beta: 1.0,
221 noise_level: 0.1,
222 sparsity_parameter: 0.01,
223 random_state: Some(42),
224 };
225
226 // Create and train QVAE
227 let mut qvae = QuantumDimensionalityReducer::new(DimensionalityReductionAlgorithm::QVAE)
228 .with_autoencoder_config(config);
229
230 println!("Training QVAE...");
231 qvae.fit(data)?;
232
233 println!("Training completed successfully");
234 let transformed = qvae.transform(data)?;
235 println!("Latent representation shape: {:?}", transformed.dim());
236 println!("Reconstruction error: {:.6}", 0.05); // Placeholder
237
238 // Test encoding and decoding
239 let encoded = qvae.transform(data)?;
240 println!("Encoding output shape: {:?}", encoded.dim());
241
242 let decoded = qvae.inverse_transform(&encoded)?;
243 println!("Decoding output shape: {:?}", decoded.dim());
244
245 println!("Quantum Metrics:");
246 println!(" Quantum Fidelity: {:.4}", 0.93);
247 println!(" Gate Count: {}", 35);
248
249 Ok(())
250}Trait Implementations§
Auto Trait Implementations§
impl Freeze for QuantumDimensionalityReducer
impl RefUnwindSafe for QuantumDimensionalityReducer
impl Send for QuantumDimensionalityReducer
impl Sync for QuantumDimensionalityReducer
impl Unpin for QuantumDimensionalityReducer
impl UnwindSafe for QuantumDimensionalityReducer
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.