2015-09-05 39 views
0

我想根據使用支持向量機給出的類來繪製數據。我被困在這個代碼中。我得到這個ValueError:新數組的總大小必須是不變的錯誤。誰能解決?

錯誤被顯示在 - > 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() 
+0

請更精確。發佈更多信息,例如錯誤發生在哪裏?發佈回溯會有很大幫助。只是發佈其他人應該修復的源代碼不是它的工作方式。 – HelloWorld

回答

1

XXYY都具有形狀(200, 200),但你的Z具有形狀(40000, 3)。因此,XXYY都包含40000個值,而Z具有120000個值,因此不能簡單地將其重塑爲XXYY的形狀,因爲您將丟失值。撥打decision_function()並不像您期望的那樣返回形狀爲(N_samples, 1)的矩陣。相反,根據scikit documentation,它返回(N_samples, n_class * (n_class-1)/2)。您可以替換predict()的調用來獲取(可能)期望的結果,即

Z = clf.predict(np.c_[XX.ravel(), YY.ravel()]) 

svm result

相關問題