2016-05-21 26 views
1

私はyahoo financeからpanda経由でデータをインポートしようとしていましたが、.as_matrix()を使って配列に変換しました。そして、クラスターにデータを入力するとエラーになります。Sklearn Error、4 dimの配列。見積もり<= 2

ValueError: Found array with dim 4. Estimator expected <= 2. 

下記これは私のコードです:

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

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) 
close_buy = df[['Close']+['B/S']] 
closing = df[['Close']].as_matrix() 
buy_sell = df[['B/S']] 


close_buy = pd.DataFrame.dropna(close_buy, 0, 'any') 
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') 

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

print(ma_100) 
clf = tree.DecisionTreeClassifier() 
x = [[close_buy,ma_50,ma_100,ma_200]] 
y = [buy_sell] 

clf.fit(x,y) 

答えて

1

私は固定が必要なバグ/物事のカップルを発見しました。

  1. 行方不明括弧buy_sell = (df.loc['2013-02-15':'2016-05-21']).as_matrix
  2. [[close_buy,ma_50,ma_100,ma_200]]は、あなたの4次元を与えるものです。代わりに、私はnp.concatenateを使用して、配列のリストを取り、それを長さまたは幅のどちらかでお互いに追加します。パラメータaxis=1は幅を指定します。これがするのは、xが28個の特徴の822個の観測からなる822×28行列です。これがあなたのために行っていないものなら、明らかに私はマークを打つことはありませんでした。しかし、これらの寸法はyと一致しています。代わりに

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

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) 
close_buy = df[['Close']+['B/S']] 
closing = df[['Close']].as_matrix() 
buy_sell = df[['B/S']] 


close_buy = pd.DataFrame.dropna(close_buy, 0, 'any') 
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') 

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

print(ma_100) 
clf = tree.DecisionTreeClassifier() 
x = np.concatenate([close_buy,ma_50,ma_100,ma_200], axis=1) # Fixed 
y = buy_sell # Brackets not necessary... I don't think 

clf.fit(x,y) 

これは私のために走った:

DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=None, 
      max_features=None, max_leaf_nodes=None, min_samples_leaf=1, 
      min_samples_split=2, min_weight_fraction_leaf=0.0, 
      random_state=None, splitter='best') 
+0

を私は答えにコメントを追加します – sam202252012

+0

を行うnp.concatenate何...これは実行時にそう – piRSquared

+0

を行って、価格は、ma_50、ma_100、ma_200となります。それらのデータは1つの – sam202252012

関連する問題