3.2.2 变分量子分类器(VQC):疾病诊断的量子分类器
- 问题: 基于患者的多维度特征(基因表达、影像特征、临床指标等)进行疾病诊断(如癌症 vs 良性、患病 vs 健康)或风险分层。
- 经典方法挑战: 在特征维度高、样本量相对小(尤其罕见病)、特征间关系复杂非线性时,经典分类器(如 SVM, RF, 深度学习)可能过拟合或泛化能力不足。
- VQC 原理: VQC 是 VQA 在监督分类任务上的直接应用。
- 数据编码: 将经典输入数据向量
x 编码到量子态中。常用量子特征映射:
- 基础旋转编码: 对每个特征分量
x_i,使用旋转门 R_y(x_i * φ) 或 R_z(x_i * φ)(φ是缩放因子)编码到对应的 Qubit 上。
- 纠缠特征映射: 在基础旋转后,应用一层或多层纠缠门(如 CNOT)和额外的旋转门,引入特征间的非线性交互。例如,
ZZFeatureMap 在 Qiskit 中广泛应用。
- 参数化量子电路(Ansatz): 在编码后的量子态上,应用一个参数化的量子电路
U(θ)。这个电路的作用类似于经典神经网络中的隐藏层,负责学习数据中的复杂模式进行分类。常用的 Ansatz 与 VQE 类似(如硬件高效 Ansatz)。
- 量子测量: 对最终的量子态进行测量。通常选择测量一个或多个特定 Qubit 的 Pauli-Z 算符的期望值
<σ_z>。这个期望值(范围 [-1, 1])可以看作模型输出的'原始分数'。
- 后处理与损失函数: 将量子测量的期望值映射到类别概率(如通过 Sigmoid 函数映射到 [0, 1])。定义损失函数(如交叉熵损失)来衡量预测概率与真实标签的差异。
- 经典优化: 使用经典优化器(如 Adam, SGD)最小化损失函数,更新 Ansatz 的参数
θ。
- 迭代: 重复步骤 2-5,直至模型收敛。
Python 实现(PennyLane 示例)

import pennylane as qml
from pennylane import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
import torch
import torch.nn as nn
torch.optim optim
X, y = make_classification(n_samples=, n_features=, n_informative=, n_redundant=, random_state=)
y = y * -
scaler = MinMaxScaler(feature_range=(, np.pi))
X_scaled = scaler.fit_transform(X)
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=, random_state=)
X_train_t = torch.tensor(X_train, dtype=torch.float32)
y_train_t = torch.tensor(y_train, dtype=torch.float32).unsqueeze()
X_test_t = torch.tensor(X_test, dtype=torch.float32)
y_test_t = torch.tensor(y_test, dtype=torch.float32).unsqueeze()
n_qubits = X.shape[]
dev = qml.device(, wires=n_qubits)
():
i (n_qubits):
qml.RY(inputs[i], wires=i)
i (n_qubits - ):
qml.CNOT(wires=[i, i + ])
i (n_qubits):
qml.RY(inputs[i], wires=i)
n_layers = weights.shape[]
l (n_layers):
i (n_qubits):
qml.RX(weights[l, i, ], wires=i)
qml.RY(weights[l, i, ], wires=i)
qml.RZ(weights[l, i, ], wires=i)
qml.expval(qml.PauliZ())