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

SVM使用预计算拉普拉斯核计算准确率时样本数不一致报错如何解决

错误原因
  • 鸢尾花数据集总样本量为150,你设置了30%比例作为测试集,因此y_test长度为45,y_train长度为105
  • 你构造的核矩阵K是训练集样本两两计算的拉普拉斯核矩阵,维度为105×105,用该矩阵调用predict得到的pred_y是105个训练集样本的预测结果
  • 你将长度为105的训练集预测结果和长度为45的测试集标签计算准确率,样本数量不匹配,触发报错。
修复方法

使用预计算核的SVM做测试集预测时,需要先构造测试集样本与训练集样本两两计算的拉普拉斯核矩阵,维度为[测试集样本数, 训练集样本数],用该矩阵做预测得到的结果才和测试集标签长度匹配。

修改后的核心代码如下:

# 训练阶段:构造训练集内部核矩阵
K_train = np.array(laplacian_kernel(X_train, gamma=.5))
svm = SVC(kernel='precomputed').fit(K_train, np.ravel(y_train))

# 预测阶段:构造测试集-训练集核矩阵
K_test = laplacian_kernel(X_test, X_train, gamma=0.5)
pred_y = svm.predict(K_test)

# 此时pred_y长度为45,和y_test匹配,可以正常计算准确率
print(accuracy_score(y_test, pred_y))

如果需要计算训练集准确率,将pred_y和y_train传入accuracy_score即可,不要和y_test混用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:54:04