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
相关产品推荐
相关产品推荐

