ValueError: shape mismatch: value array of shape...

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
uschmidt
User
Beiträge: 14
Registriert: Sonntag 9. April 2017, 15:00

Hallo zusammen,

im Rahmen einer linearen Diskriminanzanalyse bekomme ich folgende Fehlermeldung:

ValueError: shape mismatch: value array of shape (47,) could not be broadcast to indexing result of shape (47,1)

Da ich noch nicht soviel Erfahrung mit Python habe, weiß ich leider nicht, wie ich diesen Fehler beheben kann. Kann mir evtl. jemand weiterhelfen?

Mein Code sieht wie folgt aus?

Code: Alles auswählen

tscv = TimeSeriesSplit(n_splits=10)

X=X.values.reshape(-1,1)
y=y.values.reshape(-1,1)

lda=LinearDiscriminantAnalysis()

acc=[]
prediction=np.zeros(y.shape)
for train_index, test_index in tscv.split(X):
    skip_size = len(next(tscv.split(X))[0])
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]
    lda.fit(X_train.astype(int),y_train.astype(int))
    y_pred=lda.predict(X_test)
    prediction[test_index]=y_pred  
    acc.append(metrics.accuracy_score(y_test, y_pred))
    print('Acc: %.10f' % metrics.accuracy_score(y_test, y_pred))

Danke schon mal!!!
Zuletzt geändert von Anonymous am Samstag 8. Juli 2017, 13:36, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 17745
Registriert: Sonntag 21. Oktober 2012, 17:20

@uschmidt: numpy ist sehr strikt darin, ob es sich um ein eindimensionales Array oder ein zweidimensionales Array handelt. Daher muß entweder das zweidimensionale in ein eindimensionales umgewandelt werden »array_2d[:, 0]« oder umgekehrt »array_1d[:, None]«.
uschmidt
User
Beiträge: 14
Registriert: Sonntag 9. April 2017, 15:00

Danke erstmal für deinen Tipp! In welcher Zeile genau muss ich denn meinen Code verändern?

Python gibt mir folgenden Hinweis
A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().
y = column_or_1d(y, warn=True)
Wenn ich nun allerdings folgendes versuche

Code: Alles auswählen

lda.fit(X_train.astype(int),y_train[:, 0].astype(int))
bekomme ich nach wie vor die gleiche Fehlermeldung.
Sirius3
User
Beiträge: 17745
Registriert: Sonntag 21. Oktober 2012, 17:20

@uschmidt: warum erzeugst Du überhaupt in Zeile 3 und 4 2d-Arrays wenn Du sie gar nicht willst? Du hast wohl mit X_train das selbe Problem wie bei y_train.
uschmidt
User
Beiträge: 14
Registriert: Sonntag 9. April 2017, 15:00

Wenn ich das nicht mache, bekomme ich folgende Fehlermeldung:
ValueError: LinearDiscriminantAnalysis expects at least 2 samples provided in a 2 dimensional array-like input
Antworten