###前提・実現したいこと
完全プログラミング初心者です。
Anaconda上でspyder(python)を使い日経平均株価を予測するプログラミングを作ろうとしています。ネットで拾ったコードを基にanacondaで仮想環境を構築し実行したら以下のエラーがでました。原因は何でしょうか?
##発生している問題・エラーメッセージ
エラーメッセージ ValueError: Expected 2D array, got 1D array instead: array=[ 17353.66 17091.58 17237.76 ..., 22913.82 22868.71 22681.42]. Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.
###該当のソースコード
python
1import pickle 2from pathlib import Path 3 4import pandas as pd 5import numpy as np 6import matplotlib.pyplot as plt 7from keras.layers import Input, Dense, LSTM 8from keras.models import Model 9from keras.callbacks import CSVLogger 10from sklearn.preprocessing import StandardScaler 11 12 13def read_data(): 14 paths = Path('.').glob('./indices_I101_1d_*.csv') 15 df = pd.concat([pd.read_csv(p, index_col='日付', parse_dates=True, encoding='cp932') 16 for p in paths]) 17 df = df.sort_index() 18 closes = df['終値'].values 19 return closes 20 21 22def create_model(): 23 inputs = Input(shape=(10, 1)) 24 x = LSTM(300, activation='relu')(inputs) 25 price = Dense(1, activation='linear', name='price')(x) 26 updown = Dense(1, activation='sigmoid', name='updown')(x) 27 model = Model(inputs=inputs, outputs=[price, updown]) 28 model.compile(loss={ 29 'price': 'mape', 30 'updown': 'binary_crossentropy', 31 }, optimizer='adam', metrics={'updown': 'accuracy'}) 32 return model 33 34 35def build_train_test_data(base_data): 36 scaler = StandardScaler() 37 data = scaler.fit_transform(base_data) 38 x_data = [] 39 y_data_price = [] 40 y_data_updown = [] 41 for i in range(len(data) - 10): 42 x_data.append(data[i:i + 10]) 43 y_data_price.append(data[i + 10]) 44 y_data_updown.append(int((base_data[i + 10 - 1] - base_data[i + 10]) > 0)) 45 x_data = np.asarray(x_data).reshape((-1, 10, 1)) 46 y_data_price = np.asarray(y_data_price) 47 y_data_updown = np.asarray(y_data_updown) 48 train_size = int(len(data) * 0.8) 49 x_train = x_data[:train_size] 50 y_train_price = y_data_price[:train_size] 51 y_train_updown = y_data_updown[:train_size] 52 x_test = x_data[train_size:] 53 y_test_price = y_data_price[train_size:] 54 y_test_updown = y_data_updown[train_size:] 55 return x_train, y_train_price, y_train_updown, x_test, y_test_price, y_test_updown, scaler 56 57 58def main(): 59 model = create_model() 60 data = read_data() 61 x_train, y_train_price, y_train_updown, x_test, y_test_price, y_test_updown, scaler = \ 62 build_train_test_data(data) 63 model.fit(x_train, [y_train_price, y_train_updown], 64 validation_data=(x_test, [y_test_price, y_test_updown]), epochs=100, batch_size=10, 65 callbacks=[CSVLogger('train.log.csv')]) 66 model.save('model.h5') 67 with open('scaler.pkl', 'wb') as f: 68 pickle.dump(scaler, f, protocol=pickle.HIGHEST_PROTOCOL) 69 pred = model.predict(x_test)[0][:, 0].reshape(-1) 70 pred = scaler.inverse_transform(pred) 71 y_test_price = scaler.inverse_transform(y_test_price.astype('float64')) 72 result = pd.DataFrame({'pred': pred, 'test': y_test_price}) 73 result.plot() 74 plt.show() 75 76 77if __name__ == '__main__': 78 main()
###補足情報(言語/FW/ツー ル等のバージョンなど)
原因はエラーメッセージに書いてありますよ。それを読んでも原因が何か理解出来ないのですか?
回答1件
あなたの回答
tips
プレビュー