2016-05-02 68 views
0

我有一個數據集「x」及其標籤向量「y」。我想在應用NaiveBayes和交叉驗證之後繪製每個屬性的準確性(對於每個「x」列)。我想要一個條形圖。 所以最後我需要有3個小節,因爲「x」有3列。分類必須運行3次。每種功能有3種不同的精度。如何爲陣列的每個特徵繪製精度條

每當執行我的代碼它顯示:
ValueError異常:與樣品的不一致數實測值數組:[1 3] DeprecationWarning:傳遞作爲數據在0.17棄用,在0.19 willraise ValueError異常1D陣列。如果數據具有單個特徵,則使用X.reshape(-1,1)重新整形數據,如果數據包含單個特徵,則使用X.reshape(1,-1)重整數據。

我在做什麼錯?

import matplotlib.pyplot as plt 
    import numpy as np 
    from sklearn import cross_validation 
    from sklearn.naive_bayes import GaussianNB 
    clf = GaussianNB() 

    x = np.array([[0, 0.51, 0.00101], [3, 0.54, 0.00105], [6, 0.57, 0.00108], [9, 0.60, 0.00111], [1, 0.73, 0.00114], [5, 0.76, 0.00117], [8, 0.89, 120]]) 
    y = np.array([1, 0, 0, 1, 1, 1, 0]) 

    scores = list() 
    scores_std = list() 
    for i in range(x.shape[1]): 
    xA=x[:, i] 
    scoresKF2 = cross_validation.cross_val_score(clf, xA, y, cv=2) 
    scores.append(np.mean(scoresKF2)) 
    scores_std.append(np.std(scoresKF2)) 
    plt.bar(x[:,i], scores) 

plt.show() 

回答

0

檢查輸入數據,xA的形狀,我們表明,它是一維 - 具體而言,它是(7,)形狀。正如警告告訴我們的,你不允許在這裏傳入1d數組。在返回的警告中解決此問題的關鍵如果數據具有單個要素,則使用X.reshape(-1,1)或在包含單個樣本的情況下使用X.reshape(1,-1)重整數據 。因此,由於它只是一個功能,因此請執行xA = x[:,i].reshape(-1, 1)而不是xA = x[:,i]

我認爲繪圖還有另外一個問題。我不完全確定你期望看到什麼,但你應該用plt.bar(i, np.mean(scoresKF2))替換plt.bar(x[:,i], scores)

+0

謝謝你,你是對的。我改變了你告訴我的兩個值,現在它可以工作。 – Aizzaac