[英]I am getting this ValueError: total size of new array must be unchanged error. Can anyone resolve?
我想根据使用支持向量机提供的类来绘制数据。 我陷入了这段代码。
错误显示在-> Z = Z.reshape(XX.shape)
请注意,该代码是从sklearn-svm导入的。 当我尝试更改提供给应用程序的数据集时,会显示上述错误。
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm,datasets
iris = datasets.load_iris()
X = iris.data[:, :2] # we only take the first two features. We could
# avoid this ugly slicing by using a two-dim dataset
Y = iris.target
Y = np.array(Y)
# figure number
fignum = 1
# fit the model
for kernel in ('linear', 'poly', 'rbf'):
clf = svm.SVC(kernel=kernel, gamma=2)
clf.fit(X, Y)
# plot the line, the points, and the nearest vectors to the plane
plt.figure(fignum, figsize=(4, 3))
plt.clf()
plt.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], s=80,
facecolors='none', zorder=10)
plt.scatter(X[:, 0], X[:, 1], c=Y, zorder=10, cmap=plt.cm.Paired)
plt.axis('tight')
x_min = 0
x_max = 10
y_min = 0
y_max = 10
XX, YY = np.mgrid[x_min:x_max:200j, y_min:y_max:200j]
Z = clf.decision_function(np.c_[XX.ravel(), YY.ravel()])
# Put the result into a color plot
Z = Z.reshape(XX.shape)
#print Z
plt.figure(fignum, figsize=(4, 3))
plt.pcolormesh(XX, YY, Z > 0, cmap=plt.cm.Paired)
plt.contour(XX, YY, Z, colors=['k', 'k', 'k'], linestyles=['--', '-', '--'],levels=[-.5, 0, .5])
plt.xlim(x_min, x_max)
plt.ylim(y_min, y_max)
plt.xticks(())
plt.yticks(())
fignum = fignum + 1
plt.show()
XX
和YY
都具有形状(200, 200)
,但是Z
却具有形状(40000, 3)
。 因此XX
和YY
都包含40000个值,而Z具有120000个值,因此不能简单地重塑为XX
或YY
的形状,因为会丢失值。 如您所料,对decision_function()
的调用不会返回形状矩阵(N_samples, 1)
。 相反,根据scikit文档 ,它返回(N_samples, n_class * (n_class-1) / 2)
。 您可以将调用替换为predict()
以获取(可能)所需的结果,即
Z = clf.predict(np.c_[XX.ravel(), YY.ravel()])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.