2016-08-31 5 views
0

Ich versuche Scikit zu verwenden, um 2 Funktionen zu trainieren, die genannt werden: x1 und x2. Beide diese Arrays sind Form (490,1). Um ein X Argument in clf.fit(X,y) zu übergeben, habe ich np.concatenate verwendet, um eine Array-Form (490,2) herzustellen. Das Label-Array besteht aus 1 und 0 und hat die Form (490,). Der Code ist unten dargestellt:Scikit SVM Fehler: X.shape [1] = 1 sollte gleich sein 2

x1 = int_x # previously defined array shape (490,1) 
x2 = int_x2 # previously defined array shape (490,1) 
y=np.ravel(close) # where close is composed of 1's and 0's shape (490,1) 
X,y = np.concatenate((x1[:-1],x2[:-1]),axis=1), y[:-1] #train on all datapoints except last 
clf = SVC() 
clf.fit(X,y) 

Der folgende Fehler wird angezeigt:

X.shape[1] = 1 should be equal to 2, the number of features at training time 

Was ich nicht verstehe ist, warum diese Meldung allerdings erscheint, auch wenn ich die Form von X prüfen, es ist in der Tat 2 und nicht 1. Ich habe das ursprünglich mit nur einer Funktion versucht und clf.fit(X,y) hat gut funktioniert, also bin ich geneigt zu denken, dass np.concatenate etwas produziert, das nicht geeignet war. Irgendwelche Vorschläge wären großartig.

Antwort

0

Es ist schwierig zu sagen, ohne die konkreten Werte von int_x, int_x2 und close zu haben. Ja, wenn ich mit int_x, int_x2 und close zufällig als

import numpy as np 
from sklearn.svm import SVC 

int_x = np.random.normal(size=(490,1)) 
int_x2 = np.random.normal(size=(490,1)) 
close = np.random.randint(2, size=(490,)) 

, die zu Ihren Angaben entspricht aufgebaut versuchen, dann wird Ihr Code funktioniert. Daher kann der Fehler in der Art sein, wie Sie int_x, int_x2 und close erstellt haben.

Wenn Sie glauben, dass das Problem nicht da ist, können Sie bitte ein minimales reproduzierbares Beispiel mit spezifischen Werten von int_x, int_x2 und close teilen?

+0

Ich habe es gerade mit der gleichen Methode versucht, die Sie oben getan haben, aber den gleichen Fehler erhalten. Können Sie den Rest Ihres Codes bereitstellen, der von oben zu einem erfolgreichen Ergebnis geführt hat? – ColeS

0

Ich denke, ich verstehe, was mit meinem Code falsch war.

Zuerst I sollte eine weitere Variable erstellt haben, sagen x, die die Verkettung von int_x definiert und int_x2 und Form: (490,2), die die gleiche Form wie close. Dies kam später nützlich.

Als nächstes war die clf.fit(X,y) in sich nicht falsch. Ich habe meinen Vorhersagecode jedoch nicht korrekt formuliert. Zum Beispiel habe ich gesagt: clf.predict([close[-1]]) in der Hoffnung, die binäre Zielausgabe zu erfassen (entweder 0 oder 1). Das Argument, das in diese Methode übernommen wurde, war falsch. Es hätte clf.predict([x[-1]]) sein sollen, weil der Algorithmus das Label am Feature-Standort im Gegensatz zum anderen vorhersagt. Da die Variable x nun die gleiche Form wie close hat, sollte das Ergebnis clf.predict([x[-1]]) das vorhergesagte Ergebnis close[-1] ergeben.

Verwandte Themen