Dataset Integration Guide
Overview
The dataset integration module provides tools for loading, preprocessing, and encoding classical data for quantum machine learning applications. It bridges classical machine learning workflows with quantum circuit construction.
Core Components
QuantumDataset
A container class for managing datasets in quantum machine learning contexts.
Attributes:
X: Feature matrix (N samples × D features)y: Labels (N samples) - optional for unsupervised learningfeature_names: List of feature namesmetadata: Dictionary with dataset informationn_samples: Number of samplesn_features: Number of featuresshape: Tuple of (n_samples, n_features)
Data Loading
From CSV
from quantum_debugger.qml.data import load_csv
# With header and label column
dataset = load_csv(
'data.csv',
label_column='class',
has_header=True
)
# Without header, using column index
dataset = load_csv(
'data.csv',
label_column=2, # Third column is label
has_header=False
)
Parameters:
filepath(str or Path): Path to CSV filelabel_column(str or int): Column name or index for labelshas_header(bool): Whether CSV has header rowfeature_columns(list, optional): Specific columns to use as features
From JSON
from quantum_debugger.qml.data import load_json
dataset = load_json('data.json')
Expected JSON Format:
{
"data": [[x1, x2, ...], [x1, x2, ...], ...],
"labels": [y1, y2, ...],
"feature_names": ["feature_1", "feature_2", ...]
}
From NumPy Arrays
from quantum_debugger.qml.data import load_numpy
import numpy as np
X = np.random.rand(100, 4)
y = np.random.randint(0, 2, 100)
dataset = load_numpy(X, y)
Preprocessing
Normalization
Transform features to a specific range or distribution.
Min-Max Normalization:
# Scale features to [0, 1]
normalized_dataset = dataset.normalize(method='minmax')
Z-Score Standardization:
# Transform to mean=0, std=1
standardized_dataset = dataset.normalize(method='standard')
Max Absolute Value:
# Scale by maximum absolute value
scaled_dataset = dataset.normalize(method='maxabs')
Train/Test Splitting
# 80-20 split with shuffling
train_dataset, test_dataset = dataset.train_test_split(
test_size=0.2,
shuffle=True,
random_state=42 # For reproducibility
)
# Without shuffling (maintains order)
train, test = dataset.train_test_split(
test_size=0.3,
shuffle=False
)
Parameters:
test_size(float): Fraction of data for testing (0.0 to 1.0)shuffle(bool): Whether to shuffle before splittingrandom_state(int, optional): Random seed for reproducibility
Quantum Feature Maps
Feature maps encode classical data into quantum states.
ZZ Feature Map
Most commonly used feature map in quantum machine learning.
from quantum_debugger.qml.data import zz_feature_map
# Create feature map for 4-dimensional data
feature_map = zz_feature_map(n_qubits=4, reps=2)
# Encode single data point
data_point = dataset.X[0]
circuit = feature_map(data_point)
Properties:
Uses Hadamard gates for superposition
RZ rotations encode feature values
ZZ entanglement between adjacent qubits
Depth scales with
repsparameter
Formula:
U(x) = H^⊗n · RZ(x) · ZZ(x) · ... (repeated reps times)
Pauli Feature Map
Configurable feature map with different Pauli operators.
from quantum_debugger.qml.data import pauli_feature_map
# Using Z operators
fm_z = pauli_feature_map(n_qubits=3, paulis='Z', reps=2)
# Using ZZ operators
fm_zz = pauli_feature_map(n_qubits=3, paulis='ZZ', reps=2)
circuit = fm_zz(data_point)
Angle Encoding
Direct encoding of features as rotation angles.
from quantum_debugger.qml.data import angle_encoding
# Y rotations (most common)
encoder_y = angle_encoding(n_qubits=4, rotation='Y')
# X rotations
encoder_x = angle_encoding(n_qubits=4, rotation='X')
# Z rotations
encoder_z = angle_encoding(n_qubits=4, rotation='Z')
circuit = encoder_y(data_point)
Characteristics:
Simplest encoding method
One feature per qubit
Number of qubits = number of features
Fast to implement
Amplitude Encoding
Encodes data into quantum state amplitudes.
from quantum_debugger.qml.data import amplitude_encoding
# Requires log2(n_features) qubits
circuit = amplitude_encoding(data_point)
Note: This is an advanced encoding requiring state preparation circuits.
Factory Function
Simplified feature map creation:
from quantum_debugger.qml.data import get_feature_map
# Get ZZ feature map
fm = get_feature_map('zz', n_qubits=4, reps=2)
# Get angle encoding
fm = get_feature_map('angle', n_qubits=3, rotation='Y')
# Get Pauli feature map
fm = get_feature_map('pauli', n_qubits=4, paulis='ZZ')
Complete Workflow Example
from quantum_debugger.qml.data import (
load_csv,
zz_feature_map
)
import numpy as np
# 1. Load data
dataset = load_csv('iris.csv', label_column='species')
# 2. Preprocess
dataset = dataset.normalize('minmax')
train, test = dataset.train_test_split(0.2, random_state=42)
# 3. Create feature map
feature_map = zz_feature_map(
n_qubits=train.n_features,
reps=2
)
# 4. Encode training data
train_circuits = []
for sample in train.X:
circuit = feature_map(sample)
train_circuits.append(circuit)
# 5. Encode test data
test_circuits = []
for sample in test.X:
circuit = feature_map(sample)
test_circuits.append(circuit)
print(f"Training samples: {len(train_circuits)}")
print(f"Test samples: {len(test_circuits)}")
Best Practices
Data Normalization
Always normalize data before quantum encoding:
# Recommended workflow
dataset = load_csv('data.csv', label_column='label')
dataset = dataset.normalize('minmax') # Scale to [0, 1]
# Now encode to quantum
Reason: Rotation angles work best in range [0, 2π]
Feature Dimension Matching
Ensure feature dimensionality matches qubit count:
assert dataset.n_features == feature_map.n_qubits
Reproducibility
Always set random seeds for reproducible results:
train, test = dataset.train_test_split(
test_size=0.2,
random_state=42
)
API Reference
QuantumDataset Methods
dataset.normalize(method='minmax') # Returns new normalized dataset
dataset.train_test_split(test_size=0.2) # Returns (train, test) tuple
len(dataset) # Number of samples
dataset.shape # (n_samples, n_features)
repr(dataset) # String representation
Feature Map Attributes
feature_map = zz_feature_map(n_qubits=4, reps=2)
feature_map.n_qubits # Number of qubits required
feature_map.reps # Number of repetitions
feature_map.name # Feature map type name
Testing
Run dataset integration tests:
pytest tests/qml/test_dataset.py -v
Expected: 27 tests passing
Performance Considerations
Memory Usage:
Feature maps create quantum circuits in memory
For large datasets, encode data in batches
Computational Cost:
ZZ feature map: O(n_qubits × reps) gates
Angle encoding: O(n_qubits) gates
Amplitude encoding: O(2^n_qubits) complexity
References
Havlíček et al., “Supervised learning with quantum-enhanced feature spaces” (2019)
Schuld & Killoran, “Quantum machine learning in feature Hilbert spaces” (2019)
LaRose & Coyle, “Robust data encodings for quantum classifiers” (2020)