2017-10-28 4 views
1

Ich arbeite an einem Projekt, bei dem mit vorverarbeiteten Daten in der folgenden Form gearbeitet werden muss."Ein Array-Element mit einer Sequenz setzen" numpy Fehler

Beginning

Daten Erklärung wurde oben zu gegeben. Das Ziel besteht darin, vorherzusagen, ob eine geschriebene Ziffer mit dem Audio der Ziffer übereinstimmt oder nicht. Zuerst habe ich die gesprochenen Arrays von Form (N, 13) an das Mittel über die Zeitachse als solche Transformation:

Transformation

Dies schafft eine einheitliche Länge von (1,13) für jedes Array innerhalb gesprochen. Um dies in einem einfachen Vanille-Algorithmus zu testen, zip die beiden Arrays zusammen, so dass wir ein Array der Form (45000, 2) erstellen, wenn ich dies in die Fit-Funktion der LogisticRegression-Klasse einfügen, wirft es mir den folgenden Fehler: Error

Was mache ich falsch?

Code:

import numpy as np 
from sklearn.linear_model import LogisticRegression 

match = np.load("/srv/digits/match_train.npy") 
spoken = np.load("/srv/digits/spoken_train.npy") 
written = np.load("/srv/digits/written_train.npy") 
print(match.shape, spoken.shape, written.shape) 
print(spoken[0].shape, spoken[1].shape) 

def features(signal, function): 
    new = np.copy(signal) 
    for i in range(len(signal)): 
     new[i] = function(new[i], axis=0) 
    return new 

spokenMean = features(spoken, np.mean) 
print(spokenMean.shape, spokenMean[0]) 

result = np.array(list(zip(spokenMean,written))) 
print(result.shape) 

X_train, X_val, y_train, y_val = train_test_split(result, match, test_size = 
0.33, random_state = 123) 
model = LogisticRegression() 
print(X_train.shape, y_train.shape) 
model.fit(X_train, y_train) 
yh_val = model.predict(X_val) 
+0

Wie ist die Form von gesprochenemMean und ytrain? – Siddharth

+0

@Siddharth spokenMean sollte nicht in der Fit-Funktion sein, das sollte natürlich X_train sein. X_train hat eine Form von (30150,2); y_train hat eine Form von (30150,). –

+0

Gibt es immer noch Fehler mit X_train? – Siddharth

Antwort

1

Der spokenMean Typ ist object, das heißt, es ist ein 1D-Array, den kleinen 1D-Arrays hält. Das erste, was Sie tun müssen, ist convert it to a 2D float array. Dieser arbeitete für mich:

spokenMean = features(spoken, np.mean) 
spokenMean = np.vstack(spokenMean[:]).astype(np.float32) 

Dann list(zip(...)) nicht der richtige Weg ist, um die beiden Arrays verketten. Stattdessen rufen np.concatenate:

result = np.concatenate([spokenMean, written], axis=1) 

Diese X_train ein normales 2D-Array machen.

+0

Die Umformung scheint die Verkettung zu unterbrechen, da sich die Dimensionen ändern werden. Wenn Sie jedoch diese Codezeile entfernen, scheint alles zu funktionieren. Vielen Dank für Ihre Hilfe! –

Verwandte Themen