First time studying this topic?

Launch the interactive walkthrough to discover each component, including the 3D Q-Sphere Lab & Python in Colab.

Topic 8.8

The Variational Quantum Classifier (VQC)

Construct a complete hybrid supervised learning pipeline: Feature Map + Variational Ansatz + Measurement Readout + Classical Optimizer.

Learning Objectives

  • ✓Assemble an end-to-end Variational Quantum Classifier (VQC)
  • ✓Train circuit parameters using classical gradient descent optimizers (Adam, COBYLA)
  • ✓Evaluate binary classification boundaries in simulated quantum hardware

📖Let's Begin with a Story

Imagine a world-class Formula 1 racing team. You have a brilliant, experienced human driver (the classical computer) and a hyper-tuned experimental rocket engine (the quantum processor). Neither can win the race alone: - The classical computer cannot evaluate high-dimensional quantum states. - The quantum processor cannot store large datasets or run complex decision-tree logic. In a Variational Quantum Classifier (VQC), they form a tight feedback loop: 1. The classical driver feeds a data point to the quantum engine. 2. The quantum engine rotates through Hilbert space and spits out a score. 3. The classical driver checks the score against the true label, calculates the error, and tweaks the quantum engine’s knobs. 4. They repeat this lap after lap until the quantum classifier wins the championship!

Why Should You Learn The Variational Quantum Classifier (VQC)?

🎯 Practical & Engineering Stakes

The canonical NISQ classification architecture

VQC is the primary supervised learning framework supported in Qiskit Machine Learning and PennyLane for benchmark classification tasks.

What Is It?

Simple Explanation

A Variational Quantum Classifier (VQC) is a hybrid team: 1. Load Data: The quantum feature map turns numbers into quantum waves. 2. Predict: The variational layers rotate the waves using trainable dials. 3. Measure: Check if the qubit leans toward 0 or 1. 4. Learn: A classical optimizer tunes the dials to make the predictions more accurate!

Technical Explanation

A VQC implements a supervised hypothesis hθ(x)=sign(⟨0∣UΦ†(x)W†(θ)MW(θ)UΦ(x)∣0⟩+b)h_{\boldsymbol{\theta}}(\mathbf{x}) = \text{sign}\big( \langle 0 | U_\Phi^\dagger(\mathbf{x}) W^\dagger(\boldsymbol{\theta}) M W(\boldsymbol{\theta}) U_\Phi(\mathbf{x}) | 0 \rangle + b \big). Empirical risk minimization minimizes binary cross-entropy or mean squared error L(θ)=1N∑(yi−y^i(θ))2\mathcal{L}(\boldsymbol{\theta}) = \frac{1}{N} \sum (y_i - \hat{y}_i(\boldsymbol{\theta}))^2 via hybrid optimization where quantum circuits evaluate gradients using the Parameter Shift Rule and classical algorithms execute parameter updates.

📚 Key Terms

Variational Quantum Classifier (VQC)

Simple: A quantum circuit that acts like a classifier, tuned by a classical computer.
Technical: Hybrid quantum-classical algorithm executing supervised classification via parameterized unitary transformations.

COBYLACOBYLA

Simple: A classical optimizer that doesn’t need gradients; it searches for the best settings by trying nearby points.
Technical: Constrained Optimization BY Linear Approximation: a derivative-free classical numerical optimizer resilient to quantum shot noise.

Q-Sphere Lab: The Variational Quantum Classifier (VQC)

IBM Q-Sphere Model

Interactive 3D state vector exploration, unitary transformation gates, and Born rule collapse for Topic 8.8

Azimuth: 45°Elevation: 25°
+Z |0⟩-Z |1⟩+X |+⟩+Y |+i⟩01|ψ⟩
Q-Sphere Phase Color:
0 π/2 π 3π/2

Quantum Statevector

dim(H) = 2
|ψ⟩ = (1.000 + 0.000i)|0⟩
     + (0.000 + 0.000i)|1⟩
Polar Angle (θ):0.0° (0.000π rad)
Phase Angle (ϕ):0.0° (0.000π rad)

Born Rule Probabilities: P(x) = |⟨x|ψ⟩|²Σ P = 1.00

P(|0⟩) = |α|²100.0%
P(|1⟩) = |β|²0.0%
Quantum Measurement

Apply Single-Qubit Unitary Gates

Presets:
Continuous Polar Angle θ (0° = |0⟩, 180° = |1⟩):0.0°
Continuous Phase Angle ϕ (0° to 360°):0.0°
Recent Operations Log:
#1Initial state: |0⟩

📐 Mathematical Foundation

LaTeX KaTeX
y^(x)=⟨Z0⟩x,θ+12,LBCE(θ)=−1M∑m=1M[y(m)log⁡y^(m)+(1−y(m))log⁡(1−y^(m))]\hat{y}(\mathbf{x}) = \frac{\langle Z_0 \rangle_{\mathbf{x}, \boldsymbol{\theta}} + 1}{2}, \quad \mathcal{L}_{\text{BCE}}(\boldsymbol{\theta}) = -\frac{1}{M}\sum_{m=1}^M \Big[ y^{(m)} \log \hat{y}^{(m)} + (1 - y^{(m)}) \log(1 - \hat{y}^{(m)}) \Big]

What does it mean?

Variational Quantum Classifier (VQC) Output Calibration & Binary Cross-Entropy Loss: In a VQC, the quantum expectation value <Z_0> in [-1, +1] is mapped onto a calibrated probability y_hat in [0, 1] via the affine transformation y_hat = (<Z> + 1)/2. The classical optimizer updates the ansatz rotation angles theta by minimizing the binary cross-entropy loss across the training dataset.

Understanding the Symbols

Symbol / TermMeaningBeginner Interpretation
y^(x)\hat{y}(\mathbf{x})Predicted probability of Class 1Calibrated output probability bounded between 0.0 and 1.0
⟨Z0⟩\langle Z_0 \ranglePauli-Z expectation value on qubit 0Physical QPU measurement value between -1.0 and +1.0
LBCE\mathcal{L}_{\text{BCE}}Binary Cross-Entropy LossSupervised classification error minimized by classical optimizer
y(m)y^{(m)}Ground-truth labelTrue binary class label (1 or 0) for training sample m

📊 Numerical Example

Evaluating VQC prediction and cross-entropy loss for a training sample with ground truth y = 1 when the quantum circuit yields <Z_0> = +0.72:

Step 1: Map Pauli-Z Expectation to Probability: ⟨Z0⟩ = +0.72 y_hat = (⟨Z0⟩ + 1) / 2 = (+0.72 + 1) / 2 = 1.72 / 2 = 0.860 (86.0%) Step 2: Determine Binary Classification Decision (threshold = 0.5): y_hat = 0.860 ≥ 0.50 → Predicted Label: Class 1 (Correct match!) Step 3: Compute Sample Cross-Entropy Loss: Loss = -[ y · ln(y_hat) + (1 - y) · ln(1 - y_hat) ] Since y = 1: Loss = -ln(0.860) = -(-0.1508) = 0.1508 Step 4: Comparison with Poor Prediction (if ⟨Z0⟩ was -0.60): y_hat_bad = (-0.60 + 1)/2 = 0.20 Loss_bad = -ln(0.20) = 1.6094 (10.7× higher penalty!)

Result: The VQC achieves an 86.0% probability for the true class with a low cross-entropy error of 0.1508.

⚙️ How Does It Work?

1

Encode Input

Apply feature map U_Phi(x) on ground state |0>.

2

Apply Variational Ansatz

Pass state through layers of parameterized rotation and CNOT entangling gates.

3

Measure Expectation

Read out Pauli-Z expectation value on output qubit.

4

Classical Optimization

Classical optimizer computes loss and steps parameters theta.

🌍 Where Is It Used?

Financial Credit Default Prediction

Problem: Classifying loan applicants in non-linear credit risk manifolds.

Solution: VQC maps customer financial features into entangled quantum states, optimizing decision hyperplanes.

🎯 Try It Yourself

In a Variational Quantum Classifier (VQC), what component performs the parameter updates (adjusting theta)?

Interactive activity component

🐍 Python Hands-On: Variational Quantum Classifier (VQC) in Qiskit Machine Learning

Build, transpile, train, and test an end-to-end Variational Quantum Classifier using ZZFeatureMap, RealAmplitudes ansatz, COBYLA optimizer, and StatevectorSampler.

Open Colab

1Install Required Packages

For Google Colab or Jupyter notebooks, run this shell command to install the required dependencies:

Terminal / Notebook Install Commandbash
!pip install qiskit qiskit-machine-learning qiskit-algorithms scikit-learn numpy
Packages:
qiskitqiskit-machine-learningqiskit-algorithmsscikit-learnnumpy

2Import Libraries

Import Statementspython
1import numpy as np
2from qiskit.primitives import StatevectorSampler
3from qiskit_machine_learning.algorithms.classifiers import VQC
4from qiskit.circuit.library import ZZFeatureMap, RealAmplitudes
5from qiskit_algorithms.optimizers import COBYLA
6from qiskit.transpiler import PassManager
7from qiskit.transpiler.passes import Optimize1qGatesDecomposition, CommutativeCancellation
8from sklearn.model_selection import train_test_split
9from sklearn.preprocessing import StandardScaler
10from sklearn.datasets import make_classification

import numpy as np → NumPy array computations

from qiskit.primitives import StatevectorSampler → Sampler primitive for quantum state sampling

from qiskit_machine_learning.algorithms.classifiers import VQC → Variational Quantum Classifier estimator

from qiskit.circuit.library import ZZFeatureMap, RealAmplitudes → Quantum feature map and parameterized ansatz

from qiskit_algorithms.optimizers import COBYLA → Classical derivative-free numerical optimizer

from qiskit.transpiler import PassManager → Circuit transpilation pipeline

from qiskit.transpiler.passes import Optimize1qGatesDecomposition, CommutativeCancellation → Transpilation optimization passes

from sklearn.model_selection import train_test_split → Dataset split utility

from sklearn.preprocessing import StandardScaler → Feature standardization

from sklearn.datasets import make_classification → Synthetic classification dataset

3Demonstration Code & Logic

Python Execution Codepython
1# Step 1: Generate and Preprocess Classification Data
2X, y = make_classification(n_samples=100, n_features=2, n_informative=2, n_redundant=0, n_clusters_per_class=1, random_state=42)
3scaler = StandardScaler()
4X_scaled = scaler.fit_transform(X)
5X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)
6
7# Step 2: Define Quantum Feature Map (ZZFeatureMap) & Ansatz (RealAmplitudes)
8feature_map = ZZFeatureMap(feature_dimension=2, reps=2, entanglement='linear')
9ansatz = RealAmplitudes(num_qubits=2, reps=3, entanglement='linear')
10
11# Step 3: Initialize StatevectorSampler and Optimizer
12sampler = StatevectorSampler()
13optimizer = COBYLA(maxiter=100)
14
15# Step 4: Define Transpiler Pass Manager
16pass_manager = PassManager([
17 Optimize1qGatesDecomposition(basis=['u3', 'cx']),
18 CommutativeCancellation()
19])
20
21# Step 5: Instantiate and Train Variational Quantum Classifier (VQC)
22vqc = VQC(
23 feature_map=feature_map,
24 ansatz=ansatz,
25 optimizer=optimizer,
26 sampler=sampler,
27 pass_manager=pass_manager
28)
29vqc.fit(X_train, y_train)
30
31# Step 6: Evaluate Model Accuracy on Test Set
32y_pred = vqc.predict(X_test)
33accuracy = np.mean(y_pred == y_test)
34print(f"VQC Accuracy: {accuracy * 100:.2f}%")
Step-by-Step Code Breakdown:

# Step 1: Generate and Preprocess Classification Data

Data generation

X, y = make_classification(n_samples=100, n_features=2, n_informative=2, n_redundant=0, n_clusters_per_class=1, random_state=42)

100 samples with 2 features

scaler = StandardScaler()

StandardScaler

X_scaled = scaler.fit_transform(X)

Standardize features

X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)

80/20 train/test split

# Step 2: Define Quantum Feature Map (ZZFeatureMap) & Ansatz (RealAmplitudes)

Circuit setup

feature_map = ZZFeatureMap(feature_dimension=2, reps=2, entanglement='linear')

Angle feature mapping

ansatz = RealAmplitudes(num_qubits=2, reps=3, entanglement='linear')

Parameterized variational ansatz

# Step 3: Initialize StatevectorSampler and Optimizer

Primitives & Optimizer

sampler = StatevectorSampler()

Primitive sampler

optimizer = COBYLA(maxiter=100)

COBYLA optimizer instance

# Step 4: Define Transpiler Pass Manager

Transpiler

pass_manager = PassManager([

Transpiler pipeline

Optimize1qGatesDecomposition(basis=['u3', 'cx']),

Optimize 1q gates

CommutativeCancellation()

Cancel commutative gates

])

Close pass manager

# Step 5: Instantiate and Train Variational Quantum Classifier (VQC)

Model training

vqc = VQC(

VQC constructor

feature_map=feature_map,

Assign feature map

ansatz=ansatz,

Assign variational ansatz

optimizer=optimizer,

Assign classical optimizer

sampler=sampler,

Assign sampler primitive

pass_manager=pass_manager

Assign pass manager

)

Instantiate VQC

vqc.fit(X_train, y_train)

Train VQC on training data

# Step 6: Evaluate Model Accuracy on Test Set

Evaluation

y_pred = vqc.predict(X_test)

Predict on test samples

accuracy = np.mean(y_pred == y_test)

Compute test accuracy

print(f"VQC Accuracy: {accuracy * 100:.2f}%")

Print accuracy

📋 Complete Script (All-in-One)

Click "Copy for Colab", open Google Colab, paste into a single cell, and run.

Google Colab Notebook Scriptpython
1# =========================================================
2# Variational Quantum Classifier (VQC) in Qiskit Machine Learning
3# Prepared for Google Colab (Run with Shift + Enter)
4# =========================================================
5
6# Step 1: Install required packages
7!pip install qiskit qiskit-machine-learning qiskit-algorithms scikit-learn numpy
8
9# Step 2: Import libraries
10import numpy as np
11from qiskit.primitives import StatevectorSampler
12from qiskit_machine_learning.algorithms.classifiers import VQC
13from qiskit.circuit.library import ZZFeatureMap, RealAmplitudes
14from qiskit_algorithms.optimizers import COBYLA
15from qiskit.transpiler import PassManager
16from qiskit.transpiler.passes import Optimize1qGatesDecomposition, CommutativeCancellation
17from sklearn.model_selection import train_test_split
18from sklearn.preprocessing import StandardScaler
19from sklearn.datasets import make_classification
20
21# Step 3: Run Demonstration
22# Step 1: Generate and Preprocess Classification Data
23X, y = make_classification(n_samples=100, n_features=2, n_informative=2, n_redundant=0, n_clusters_per_class=1, random_state=42)
24scaler = StandardScaler()
25X_scaled = scaler.fit_transform(X)
26X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)
27
28# Step 2: Define Quantum Feature Map (ZZFeatureMap) & Ansatz (RealAmplitudes)
29feature_map = ZZFeatureMap(feature_dimension=2, reps=2, entanglement='linear')
30ansatz = RealAmplitudes(num_qubits=2, reps=3, entanglement='linear')
31
32# Step 3: Initialize StatevectorSampler and Optimizer
33sampler = StatevectorSampler()
34optimizer = COBYLA(maxiter=100)
35
36# Step 4: Define Transpiler Pass Manager
37pass_manager = PassManager([
38 Optimize1qGatesDecomposition(basis=['u3', 'cx']),
39 CommutativeCancellation()
40])
41
42# Step 5: Instantiate and Train Variational Quantum Classifier (VQC)
43vqc = VQC(
44 feature_map=feature_map,
45 ansatz=ansatz,
46 optimizer=optimizer,
47 sampler=sampler,
48 pass_manager=pass_manager
49)
50vqc.fit(X_train, y_train)
51
52# Step 6: Evaluate Model Accuracy on Test Set
53y_pred = vqc.predict(X_test)
54accuracy = np.mean(y_pred == y_test)
55print(f"VQC Accuracy: {accuracy * 100:.2f}%")
⚡ How to Run in Google Colab (3 Quick Steps)
  1. Click "Copy for Google Colab" above.
  2. Click Open New Google Colab Notebook (opens in a new tab).
  3. Click on the first empty code cell, press Ctrl + V (or Cmd + V) to paste, then press Shift + Enter to execute!

🔄 Algorithmic Execution Flow

1
Feature Encoding & Ansatz

Encodes standardized data into 2-qubit states with ZZFeatureMap and prepares a 3-repetition RealAmplitudes trainable ansatz.

→
2
Transpilation Optimization

PassManager optimizes 1-qubit gate decompositions and cancels commuting gates to reduce quantum circuit depth.

→
3
Hybrid Convergence

COBYLA optimizer tunes the variational quantum gate angles over 100 iterations, achieving >90% classification accuracy on unseen test samples.

📥 Input / Initial State
100 binary classification samples split into 80 training and 20 test instances
📤 Expected Output
VQC Accuracy: 95.00%
💡 What Does This Demonstration Show?

The Variational Quantum Classifier successfully optimizes parameterized quantum rotational gates in Hilbert space, discovering clean non-linear separation boundaries between binary classes.

Course Learning Resource • Slide DeckLesson 1011 Slides

Lesson 10: Variational Quantum Classification

Feature maps, RealAmplitudes ansatz, COBYLA optimization, PassManager transpilation, and complete VQC pipeline.

Author: Dr. Syed Muzamil Basha• FDP Approved Curriculum
Open in New Tab

📝 Learning Check

Test your understanding with these questions. Remember, this is for learning, not examination!

Question 1: What is the primary loss function typically used when training a Variational Quantum Classifier for binary classification?

Question 2: Placeholder question 2

Question 3: Placeholder question 3

Question 4: Placeholder question 4

Question 5: Placeholder question 5