You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QSVC的fit函数是否要求参数为浮点型?类型错误求助

解决PegasosQSVC.fit()的TypeError问题

错误核心原因

报错TypeError: Invalid parameter values, expected Sequence[Sequence[float]]的根源是输入的特征数据不符合浮点型二维序列要求:

  • 你选中的marital(婚姻状态)、loan(贷款情况)属于分类变量(通常是字符串/离散枚举值),并非浮点类型,量子核函数无法直接处理这类非数值型特征。
  • 标签Y即便为字符串也不会触发该错误,PegasosQSVC内部会自动完成标签编码,无需额外处理。
  • 额外隐患:你的X与Y样本范围不匹配——X取loc[1:1000](行索引1到1000,共1000条),Y取iloc[:1000](行索引0到999,共1000条),两者对应样本完全错位,必须统一。

修复步骤

  1. 分类特征转浮点型:用独热编码将分类变量转为量子模型可处理的数值特征,避免引入无意义的顺序关系。
  2. 统一样本范围:确保X和Y的行索引完全对应。
  3. 可选规范处理:手动将字符串标签转为数值型(非强制,但能提升代码可读性)。

修改后的完整代码

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import OneHotEncoder
from qiskit.circuit.library import ZFeatureMap
from qiskit_machine_learning.kernels import FidelityQuantumKernel
from qiskit.algorithms.state_fidelities import ComputeUncompute
from qiskit.primitives import Sampler
from qiskit_machine_learning.algorithms import PegasosQSVC

# 读取数据并统一取前1000行样本
data = pd.read_csv('train.csv')
sample_data = data.iloc[:1000]

# 分离特征与标签
X_raw = sample_data[["marital", "balance", "loan"]]
Y = sample_data.iloc[:, -1].values

# 对分类特征做独热编码,转为浮点型
encoder = OneHotEncoder(sparse_output=False, drop='first')
encoded_cats = encoder.fit_transform(X_raw[["marital", "loan"]])
# 合并编码后的分类特征与数值特征balance
X_processed = np.hstack([encoded_cats, X_raw[["balance"]].values])

# 划分训练测试集
x_train, x_test, y_train, y_test = train_test_split(X_processed, Y)

# 初始化量子组件
data_feature_map = ZFeatureMap(feature_dimension=X_processed.shape[1], reps=1 )
sampler = Sampler()
fidelity = ComputeUncompute(sampler=sampler)
data_kernel = FidelityQuantumKernel(fidelity=fidelity, feature_map=data_feature_map)

# 训练并评估模型
pegasos_qsvc = PegasosQSVC(quantum_kernel=data_kernel, C=1000, num_steps=100)
pegasos_qsvc.fit(x_train, y_train)
qsvc_score = pegasos_qsvc.score(x_test, y_test)

print(f"QSVC classification test score: {qsvc_score}")

关键修改说明

  • 用OneHotEncoder将marital和loan转为浮点型数组,drop='first'参数避免多重共线性问题。
  • 用iloc[:1000]统一样本范围,确保特征与标签一一对应。
  • 用X_processed.shape[1]动态指定特征维度,避免手动修改数值导致的错误。

内容的提问来源于stack exchange,提问作者Pirateking

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 07:45:30