VQCClassifier#
The VQCClassifier is a variational quantum classifier compatible with scikit-learn.
- class VQCClassifier(n_qubits: int = 4, feature_map: FeatureMap | None = None, ansatz=None, measurement=None, optimizer='adam', learning_rate=0.01, n_iter=100, batch_size=None, random_state=None, device='default.qubit')[source]
Bases:
QuantumEstimator,ClassifierMixinVariational Quantum Classifier.
A variational quantum classifier (VQC) is a quantum machine learning model that combines data encoding (feature map), a parameterized quantum circuit (ansatz), and measurement to perform binary or multi-class classification. The model is trained using gradient-based optimization.
This implementation follows the circuit-centric quantum classifier approach of Schuld et al. (2018, arXiv:1804.00633) and the broader variational quantum algorithm (VQA) paradigm. For multi-class problems, it uses a one-vs-rest (OvR) strategy.
The training process: 1. Encode classical data into quantum states using the feature map 2. Apply parameterized ansatz circuit 3. Measure expectation value (typically Pauli-Z on first qubit) 4. Minimize binary cross-entropy loss via gradient descent
The gradients are computed using the parameter shift rule, which provides exact gradients on quantum hardware (Mitarai et al., 2018, arXiv:1803.00745).
- Parameters:
n_qubits (int, default=4) – Number of qubits.
feature_map (FeatureMap, optional) – Data encoding. Default: AngleFeatureMap()
ansatz (Ansatz, optional) – Parameterized circuit. Default: StronglyEntanglingAnsatz(layers=2)
measurement (Measurement, optional) – Measurement operator. Default: PauliZExpectation()
optimizer (str or callable, default="adam") – Optimizer (adam or sgd from PennyLane).
learning_rate (float, default=0.01) – Learning rate for the optimizer.
n_iter (int, default=100) – Number of optimization iterations.
batch_size (int, optional) – Batch size for training. If None, uses full batch.
random_state (int, optional) – Random seed for weight initialization.
device (str, default="default.qubit") – PennyLane device for simulation.
- classes_
Class labels.
- Type:
ndarray
- n_features_in_
Number of features seen during fit.
- Type:
int
- n_classes_
Number of classes.
- Type:
int
- model_
The trained quantum model (binary case) or None (multiclass OvR).
- Type:
VariationalModel, optional
- estimators_
One-vs-rest classifiers for multi-class.
- Type:
list[VQCClassifier]
- loss_history_
Training loss per iteration.
- Type:
list[float]
- qnode_
Cached QNode for inference (binary case only).
- Type:
callable, optional
- weights_
Trained weights (binary case).
- Type:
ndarray, optional
References
- fit(X, y)[source]
Fit the classifier.
- predict(X)[source]
Predict class labels.
- predict_proba(X)[source]
Predict class probabilities.
- decision_function(X)[source]
Compute decision function (raw QNode output).
- score(X, y)[source]
Return classification accuracy.
Binary vs Multi-class#
For binary classification (2 classes), a single QNode measures Pauli-Z expectation. For multi-class, one-vs-rest strategy trains one binary classifier per class.
Using with sklearn#
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from psipose.estimators import VQCClassifier
pipe = Pipeline([
("scaler", StandardScaler()),
("vqc", VQCClassifier(n_qubits=4, n_iter=100))
])
pipe.fit(X_train, y_train)