首页 > 解决方案 > ValueError:尝试绘制 SVM 时 x 和 y 的大小必须相同

问题描述

我是机器学习的新手,我发现 python 代码可以从 python 中的 sklearn 中查看 SVM 模型的结果,代码是

import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
from sklearn.datasets.samples_generator import make_blobs

X,y=make_blobs(n_samples=40,centers=2,random_state=20)

clf=svm.SVC(kernel='linear',C=1000)
clf.fit(X,y)

plt.scatter(X[:,0],X[:,1],c=y,s=30,cmap=plt.cm.Paired)

### assign new data
newData=[[3,4],[5,6]]

#print(clf.predict(newData))
#plot the deciston function
ax=plt.gca()
xlim=ax.get_xlim()
ylim=ax.get_ylim()

#creat a grid to evalute the modle
xx=np.linspace(xlim[0],xlim[1],30)
yy=np.linspace(ylim[0],ylim[1],30)
YY,XX=np.meshgrid(yy,xx)
xy=np.vstack([XX.ravel(),YY.ravel()]).T
Z=clf.decision_function(xy).reshape(XX.shape)

#plot decision bundray and margins
ax.contour(XX,YY,Z,colors='k',levels=[-1,0,1],alpha=0.5,linestyles=['--','-','--'])
# plot support vector
ax.scatter(clf.support_vectors_[:0],clf.support_vectors_[:1],s=100,linewidths=1,facecolors='none')
plt.show()

当我运行上面的代码时,我得到了这个错误:

文件“C:/Users/Black_Swan/PycharmProjects/test/images/svm.py”,第 47 行,在 ax.scatter(clf.support_vectors_[:0],clf.support_vectors_[:1],s=100,linewidths= 1,facecolors='none') 文件“C:\Python27\lib\site-packages\matplotlib_init _.py ”,第 1870 行,内部返回 func(ax, *args, **kwargs) 文件“C:\ Python27\lib\site-packages\matplotlib\axes_axes.py",第 4257 行,在 scatter raise ValueError("x and y must be the same size") ValueError: x and y must be the same size

谁能帮我找出错误?

标签: pythonmatplotlibscikit-learnsvmscatter-plot

解决方案


.scatter()函数采用浮点数或类似数组的xy坐标。由于这些是坐标,它们应该是成对的,因此x应该y是相等的长度。在您的代码x中 isclf.support_vectors_[:0]yis clf.support_vectors_[:1]。语法iterator[:k]说我们应该选择迭代器中的每个元素,直到我们不应该选择的第 k 个元素。因此,当我们将这些东西组合在一起时,我们可以发现它xy具有不同的长度,因此会引发错误。


推荐阅读