如何让Qiskit VQC输出各类别预测概率而非仅分类标签?
获取Qiskit VQC二分类的预测概率
对于Qiskit的VQC二分类任务,要获取每个样本的类别概率(格式[p1,p2]),有几种直接的方法:
直接调用
predict_proba()方法
这是最简便的方式,Qiskit Machine Learning中的VQC类(属于Classifier基类)内置了predict_proba()方法,直接返回每个样本的类别概率数组:# 假设vqc是你训练好的模型,X_test是测试数据集 probabilities = vqc.predict_proba(X_test)输出的
probabilities是形状为(n_samples, 2)的数组,每个元素对应一个样本的[p1, p2],两个概率之和为1,正好满足绘制ROC曲线的需求。旧版本Qiskit手动获取概率
如果你的Qiskit版本较旧,predict_proba()不可用,可以直接调用神经网络的forward()方法获取原始概率输出:# 从VQC的神经网络模块获取概率 probabilities = vqc._neural_network.forward(X_test, training=False)二分类场景下,这个输出同样是每个样本对应两个类别的概率值。
底层手动计算概率(适合自定义电路场景)
如果你是手动构建量子电路而非直接使用VQC封装类,可以通过运行电路统计测量计数来转换为概率:from qiskit import Aer, execute backend = Aer.get_backend('qasm_simulator') probabilities = [] shots = 1024 # 测量次数,次数越多概率越准确 for x in X_test: # 构建包含输入编码的完整量子电路 circuit = vqc.construct_circuit(x) # 执行电路并获取计数结果 result = execute(circuit, backend, shots=shots).result() counts = result.get_counts() # 计算两个类别的概率(假设类别对应测量结果'0'和'1') p0 = counts.get('0', 0) / shots p1 = counts.get('1', 0) / shots probabilities.append([p0, p1])
拿到概率数组后,就可以用sklearn.metrics.roc_curve和roc_auc_score来绘制ROC曲线了。
内容的提问来源于stack exchange,提问作者Zhelun Li
相关产品推荐
相关产品推荐

