2016-05-02 32 views
0

Ich habe einen Datensatz "x" und seinen Label-Vektor "y". Ich möchte die Genauigkeit für jedes Attribut (für jede Spalte von "x") nach der Anwendung von NaiveBayes und der Kreuzvalidierung darstellen. Ich möchte ein Balkendiagramm. Also am Ende muss ich 3 Balken haben, weil "x" 3 Spalten hat. Und die Klassifizierung muss 3 mal laufen. 3 verschiedene Genauigkeiten für jede Funktion.So zeichnen Sie Genauigkeitsbalken für jedes Merkmal eines Arrays

Jedes Mal, wenn ich meinen Code ausführen es zeigt:
Valueerror: Gefunden Arrays mit inkonsistenter Anzahl von Proben: [1 3] DeprecationWarning: Passing 1d Arrays als Daten in 0,17 veralteten und willraise Valueerror in 0,19. Ändern Sie Ihre Daten um, indem Sie X.reshape (-1, 1) verwenden, wenn Ihre Daten ein einzelnes Feature enthalten, oder X.reshape (1, -1), wenn es ein einzelnes Beispiel enthält.

Was mache ich falsch?

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() 

Antwort

0

die Form Ihrer Eingabedaten prüfen, xA, zeigt uns, dass es 1-dimensional ist - speziell, es (7,) Form ist. Wie die Warnung sagt, dürfen Sie hier kein 1d-Array übergeben. Der Schlüssel zum Lösen dieser in der Warnung, die zurückgegeben wurde Reshape Ihre Daten entweder mit X.reshape (-1, 1), wenn Ihre Daten ein einzelnes Feature oder X.reshape (1, -1), wenn es ein einzelnes Beispiel enthält . Da es sich nur um ein einzelnes Merkmal handelt, machen Sie dies xA = x[:,i].reshape(-1, 1) statt xA = x[:,i].

Ich denke, es gibt ein anderes Problem mit dem Plotten. Ich bin mir nicht ganz sicher, was Sie erwarten, aber Sie sollten wahrscheinlich plt.bar(x[:,i], scores) durch plt.bar(i, np.mean(scoresKF2)) ersetzen.

+0

Vielen Dank, Sie hatten Recht. Ich habe beide Werte geändert, wie du es mir gesagt hast, und jetzt funktioniert es. – Aizzaac

Verwandte Themen