Ich versuche Scikit-learn SVM zu verwenden, um vorherzusagen, ob eine Aktie von S & P500 den Index schlägt oder nicht. Ich habe die 'Sample' Datei, aus der ich extrahiere die Features X und die Etiketten (schlägt den Index oder schlägt es nicht) Y.Scikit-lernen SVM: Umformung X führt zu inkompatiblen Formen
Wenn ich es das erste Mal (ohne Umformung X) versuchte, bekam ich die die folgende Abschreibungs Fehler:
DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17
and will raise ValueError in 0.19. Reshape your data either using
X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1)
if it contains a single sample.
Folglich habe ich versucht, die Umgestaltung von X nach der Empfehlung und auch einige Forum-Beiträge. Jetzt bekomme ich jedoch den folgenden Wert Fehler, dass X und Y nicht die gleiche Form haben.
ValueError: X and y have incompatible shapes.
X has 4337 samples, but y has 393.
Unten können Sie die Formen von X und Y sehen vor Umformung:
('Shape of X = ', (493, 9))
('Shape of Y = ', (493,))
und nach dem Umformen:
('Shape of X = ', (4437, 1))
('Shape of Y = ', (493,))
ich auch so neu zu gestalten versucht, dass ich die (493 bekommen , 9) Form, aber auch das hat nicht funktioniert, da ich den folgenden Fehler bekommen habe.
ValueError: total size of new array must be unchanged.
ich unter dem Code geschrieben die Funktionen und Etiketten von der Pandas Datenrahmen und und die SVM-Analyse zu extrahieren:
Eigenschaft & Label-Auswahl:
X = np.array(sample[features].values)
X = preprocessing.scale(X)
X = np.array(X)
X = X.reshape(-1,1)
Y = sample['status'].values.tolist()
Y = np.array(Y)
Z = np.array(sample[['changemktvalue', 'benchmark']])
SVM-Tests:
test_size = 50
invest_amount = 1000
total_invests = 0
if_market = 0
if_strat = 0
clf = svm.SVC(kernel="linear", C= 1.0)
clf.fit(X[:-test_size],Y[:-test_size])
correct_count = 0
for x in range(1, test_size+1):
if clf.predict(X[-x])[0] == Y[-x]:
correct_count += 1
if clf.predict(X[-x])[0] == 1:
invest_return = invest_amount + (invest_amount * (Z[-x][0]/100)) #zeroth element of z
market_return = invest_amount + (invest_amount * (Z[-x][1]/100)) #marketsp500 is at pos 1
total_invests += 1
if_market += market_return
if_strat += invest_return
print("Accuracy:", (float(correct_count)/test_size) * 100.00)
Wäre toll, wenn Sie irgendwelche Eingaben haben, wie zu lösen Dies.
denke ich, sollten Sie nur 'umformen ((- 1,1))' auf 'Y' und über Rundfunk Regeln lesen ... – Julien
das ist genau das, das Problem, dass diese Umformung nicht funktionierte, da es zu dem Wertfehler über – DaveL
führte. Sie sollten nicht umformen. Das Umformen ist nur dann möglich, wenn Sie ein einzelnes Merkmal haben, wie aus der Warnung hervorgeht. Aber Sie haben 9 Funktionen in 'X'. Entfernen Sie die Umformung in Ihrem Code und stellen Sie den gesamten Stack-Trace ein. – Priyatham