2016-05-23 2 views
3

Also habe ich die Testdaten gefüttert, aber wenn ich versuche, sie mit clf.predict() zu testen, bekomme ich einen Fehler. Also ich will es auf die Daten voraussagen, die ich gebe, das ist der letzte Schlusskurs, der gleitende Durchschnitt. Aber jedes Mal, wenn ich etwas versuche, gibt es nur einen Fehler. Gibt es auch einen besseren Weg dies zu tun als auf Pandas?ValueError: kann die Sequenz mit der Größe 821 nicht in die Array-Achse mit der Dimension 7 kopieren

from sklearn import tree 
import pandas as pd 
import pandas_datareader.data as web 
import numpy as np 

df = web.DataReader('goog', 'yahoo', start='2012-5-1', end='2016-5-20') 

close_price = df[['Close']] 

ma_50 = (pd.rolling_mean(close_price, window=50)) 
ma_100 = (pd.rolling_mean(close_price, window=100)) 
ma_200 = (pd.rolling_mean(close_price, window=200)) 

#adding buys and sell based on the values 
df['B/S']= (df['Close'].diff() < 0).astype(int) 
closing = (df[['Close']]) 
buy_sell = (df[['B/S']]) 



ma_50 = pd.DataFrame.dropna(ma_50, 0, 'any') 
ma_100 = pd.DataFrame.dropna(ma_100, 0, 'any') 
ma_200 = pd.DataFrame.dropna(ma_200, 0, 'any') 

closing = (df.loc['2013-02-15':'2016-05-21']) 
ma_50 = (df.loc['2013-02-15':'2016-05-21']) 
ma_100 = (df.loc['2013-02-15':'2016-05-21']) 
ma_200 = (df.loc['2013-02-15':'2016-05-21']) 
buy_sell = (df.loc['2013-02-15':'2016-05-21']) # Fixed 

close = pd.DataFrame(closing) 
ma50 = pd.DataFrame(ma_50) 
ma100 = pd.DataFrame(ma_100) 
ma200 = pd.DataFrame(ma_200) 
buy_sell = pd.DataFrame(buy_sell) 

clf = tree.DecisionTreeRegressor() 
x = np.concatenate([close, ma50, ma100, ma200], axis=1) 
y = buy_sell 

clf.fit(x,y) 
close_buy1 = close[:-1] 
m5 = ma_50[:-1] 
m10 = ma_100[:-1] 
ma20 = ma_200[:-1] 
b = np.concatenate([close_buy1, m5, m10, ma20], axis=1) 

clf.predict([close_buy1, m5, m10, ma20]) 

Der Fehler, der das gibt ist:

ValueError: cannot copy sequence with size 821 to array axis with dimension `7` 

Ich habe versucht, alles zu tun, ich weiß, aber es funktionierte nicht wirklich heraus.

+0

weiß jemand, warum dies nicht – sam202252012

Antwort

2

Ich glaube nicht, dass Sie eine Liste weitergeben können, um vorherzusagen.

Vielmehr müssen Sie concat die Merkmalsdatenrahmen/Matrizen zusammen:

In [11]: clf.predict(pd.concat([close_buy1, m5, m10, ma20], axis=1)) 
Out[11]: 
array([[ 7.87401353e+02, 7.93261381e+02, 7.87071324e+02, ..., 
      5.48000000e+06, 3.96049623e+02, 0.00000000e+00], 
     [ 7.95991368e+02, 8.07001373e+02, 7.95281379e+02, ..., 
      5.88550000e+06, 4.03022676e+02, 0.00000000e+00], 
     [ 8.05301357e+02, 8.08971379e+02, 7.91791350e+02, ..., 
      5.54900000e+06, 3.95834832e+02, 1.00000000e+00], 
     ..., 
     [ 7.15989990e+02, 7.21520020e+02, 7.04109985e+02, ..., 
      1.99950000e+06, 7.06229980e+02, 1.00000000e+00], 
     [ 7.03669983e+02, 7.11599976e+02, 7.00630005e+02, ..., 
      1.76340000e+06, 7.06630005e+02, 0.00000000e+00], 
     [ 7.02359985e+02, 7.06000000e+02, 6.96799988e+02, ..., 
      1.65630000e+06, 7.00320007e+02, 1.00000000e+00]]) 
+0

funktioniert Ich will es entweder 1 oder 0 nicht die Ausgabe über vorherzusagen, so gebe ich es ist der Wert und ich will es mir geben entweder 1 oder 0 – sam202252012

+0

bitte helfen Sie bei diesem Problem, da ich nicht sicher bin, was zu tun ist – sam202252012