2017-04-04 65 views
0

我想繪製我的數據的KNN圖形,但是我不斷收到這個我不能弄清楚的錯誤。爲多個特徵繪製KNN分類器圖形

clf = neighbors.KNeighborsClassifier(k, weights=weights) 
AttributeError: 'list' object has no attribute 'KNeighborsClassifier' 

下面我重視我的代碼(不包括進口):

data_df = pd.DataFrame.from_csv("fvectors.csv") 
X = np.array(data_df[features].values) 

data_df2 = pd.DataFrame.from_csv("fvectors.csv") 
y = np.array(data_df2[features1].replace("Circle",0).replace("Equilateral Triangle",1) 
      .replace("Right Angle Triangle",2).replace("Acute Triangle",3) 
      .replace("Obtuse Triangle",4).replace("Square",5) 
      .replace("Parallelogram",6).replace("Rectangle",7) 
      .replace("Pentagon",8).replace("Seal",9).values.tolist()) 

#step size in the mesh 
h = .02 

#Create color maps 
cmap_light = ListedColormap(['#FFAAAA', '#AAFFAA', '#AAAAFF']) 
cmap_bold = ListedColormap(['#FF0000', '#00FF00', '#0000FF']) 

for weights in ['uniform', 'distance']: 
    #we create an instance of Neighbours Classifier and fit the data. 
    clf = neighbors.KNeighborsClassifier(k, weights=weights) 
    clf.fit(X, y) 

    #Plot the decision boundary. For that, we will assign a color to each 
    #point in the mesh [x_min, x_max]x[y_min, y_max]. 
    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)) 
    Z = clf.predict(np.c_[xx.ravel(), yy.ravel()]) 

    #Put the result into a color plot 
    Z = Z.reshape(xx.shape) 
    plt.figure() 
    plt.pcolormesh(xx, yy, Z, cmap=cmap_light) 

    #Plot also the training points 
    plt.scatter(X[:, 0], X[:, 1], c=y, cmap=cmap_bold) 
    plt.xlim(xx.min(), xx.max()) 
    plt.ylim(yy.min(), yy.max()) 
    plt.title("3-Class classification (k = %i, weights = '%s')" % (k)) 

plt.show() 

And my fvectors.csv file looks like this:

另外:

features = ["Number of Sides", "Standard Deviation of Number of Sides/Perimeter", 
     "Standard Deviation of the Angles", "Largest Angle"] 


features1 = ["Label"] 

有人能看到什麼即時通訊做錯了,或者有是否有其他出類拔萃的錯誤?

+0

什麼是「鄰居」?你沒有在代碼中定義它。確保你已經閱讀了如何創建[mcve]。 – ImportanceOfBeingErnest

回答

0

問題似乎與導入。試試:

from sklearn.neighbors import KNeighborsClassifier

然後直接使用KNeighborsClassifier。

+0

我收到此錯誤: 'ValueError:查詢數據維度必須與訓練數據維度匹配' –

+1

您是認真的,@ Thom?已知的一半代碼在未知線路中給出了一個ValueError,但是您希望有人找出原因? – ImportanceOfBeingErnest

+0

Thom,檢查你的輸入(X和Y)的形狀打印他們的形狀。 (打印X.shape應該工作),然後嘗試重塑方法來修復它們的形狀。這是我最好的猜測,否則給我們更多的信息。 – Fujii