質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

受付中

kerasのステートフル LSTMで予測をするときに、たくさんのテストデータを用意をした方がいいのか

ayumuKi
ayumuKi

総合スコア17

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1回答

0評価

0クリップ

2062閲覧

投稿2020/05/08 12:22

kerasの ステートフル LSTMで、株価の予測の学習をしました。
このモデルは10日の連続したデータから11日目のデータを予測するようにしていて、
ある日(例えば5月25日)の株価を予測したいときに、それよりも10日前からの10日分のデータを入力すれば出力されます。けれども、ステートフルモデルであるため、隠れ層のhidden_stateが時系列データを入力するとどんどん保存されていくので、10日分だけでなく、もっとたくさんの過去の連続したデータを入力していく方がより良い予測ができるのでしょうか。
わかりにくい日本語になってしまったのですが、つまり10日分だけでなく、100日分くらいの多くの連続したデータを入力した方がいいのでしょうか?
それとも実験してみるしかないのでしょうか。

python

コード import numpy import pandas import matplotlib.pyplot as plt from sklearn import preprocessing from keras.models import Sequential from keras.layers.core import Dense, Activation, Dropout from keras.layers.recurrent import LSTM length_of_sequences = 10 batch_size = 1 class Prediction : def __init__(self): self.length_of_sequences = length_of_sequences self.in_out_neurons = 1 self.hidden_neurons = 80 self.time_idx = None def load_data(self,data, time_size,batch_size,in_out_neurons=1):#バッチの作成 data_size = len(data) t_data = data[['終値']].iloc[1:] t_data = t_data[['終値']].values.flatten().tolist() data = data[['終値']].values.flatten().tolist() max_iters = data_size // (batch_size * time_size) self.time_idx = 0 x = None t = None for i in range(max_iters): batch_x = numpy.empty((batch_size, time_size)) batch_t = numpy.empty((batch_size, in_out_neurons)) jump = data_size // batch_size offsets = [j * jump for j in range(batch_size)] # バッチの各サンプルの読み込み開始位置 for time in range(time_size): for k, offset in enumerate(offsets): batch_x[k, time] = data[(offset + self.time_idx) % data_size] batch_t[k,0] = t_data[(offset + self.time_idx) % data_size] #in_out_neurons = 1 の時 self.time_idx += 1 if i == 0: x = batch_x t = batch_t else: x = numpy.concatenate([x,batch_x],0) t = numpy.concatenate([t,batch_t],0) x = x.reshape(-1,length_of_sequences,in_out_neurons) return x, t def create_model(self) :#ステートフルモデル model = Sequential() model.add(LSTM(self.hidden_neurons, \ batch_input_shape=(1, self.length_of_sequences, self.in_out_neurons), \ return_sequences=False,stateful=True))#None model.add(Dense(self.in_out_neurons)) model.add(Activation("linear")) model.compile(loss="mape", optimizer="adam") return model def train(self, X_train, y_train,x_test,y_test) :#学習 model = self.create_model() for i in range(20): model.fit(X_train, y_train, batch_size=1, epochs=1,shuffle=False,validation_data=(x_test, y_test)) model.reset_states() return model if __name__ == "__main__": prediction = Prediction() data = pandas.read_csv('/content/drive/My Drive/csv_data/changed_csv7203_1983_2018.csv',index_col=0) test_data = pandas.read_csv('/content/drive/My Drive/csv_data/changed_csv7203_2018_2019.csv',index_col=0) data['終値'] = preprocessing.scale(data['終値']) test_data['終値'] = preprocessing.scale(test_data['終値']) prediction.length_of_sequences) x_train, y_train = prediction.load_data(data[['終値']], prediction.length_of_sequences,1) x_test, y_test = prediction.load_data(test_data[['終値']], prediction.length_of_sequences,1) model = prediction.train(x_train, y_train,x_test,y_test) predicted = model.predict(x_test,batch_size = 1) result = pandas.DataFrame(predicted) result.columns = ['predict'] result['actual'] = y_test result.plot() plt.show()

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。