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

SVC使用预计算Laplace核绘制决策边界维度不匹配报错如何解决

问题解决方法

错误原因

报错出现在测试核矩阵计算环节:meshgrid生成的xx、yy是二维网格结构,直接传入laplacian_kernel时,函数会把整个二维数组的行当做样本、列当做特征,和训练集X的2个特征维度不匹配,触发维度错误。

修复方案

先将网格点展平为和训练集特征维度一致的样本数组,再计算测试核矩阵,修改对应两处代码即可:

  1. 计算测试核矩阵前,先将xx、yy展平拼接为(样本数, 2)的特征矩阵
  2. 移除predict调用中多余的np.c_拼接操作

修正后完整可运行代码

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.svm import SVC
from sklearn.metrics.pairwise import laplacian_kernel

iris_data = load_iris()
X = iris_data.data[:, :2]
y = iris_data.target
h = 0.02
X = np.array(X)
y = np.array(y)

K = np.array(laplacian_kernel(X, gamma=.5))
svm = SVC(kernel='precomputed').fit(K, np.ravel(y))

x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))

# 新增:将网格点展平为(n_samples, 2)的特征矩阵
X_test = np.c_[xx.ravel(), yy.ravel()]
# 修正:用展平后的测试特征计算核矩阵
K_test = np.array(laplacian_kernel(X_test, X, gamma=.5)) 
# 修正:直接传入K_test预测,无需多余拼接
Z = svm.predict(K_test)

Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, cmap=plt.cm.coolwarm, alpha=0.8)
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.coolwarm)
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
plt.xticks(())
plt.yticks(())
plt.title('SVC with Laplace kernel')
plt.show()

运行上述代码即可正常输出带Laplace核SVM决策边界的鸢尾花分类可视化结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:30:02