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

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

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

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

Python

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

Q&A

1回答

2867閲覧

LSTMによる時系列データの予測が上手く行えない

tako_s

総合スコア0

Keras

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

Python

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

0グッド

0クリップ

投稿2020/05/06 08:08

編集2022/01/12 10:55

学習させたデータは東京の2000年から2019年までの気温と日(1~365)で、直近7日分のデータを元に次の日の気温の予測を行えるようにしたいです。
30日分の予測と正解データをグラフで表示させてみたところ、次のようになりました。
イメージ説明
予測のグラフが正解データのグラフを一日分ズラしたような形になっていて、何か違うような気がします。
(気温のみを学習させることも試してみましたがほぼ同じ予測結果になりました。)
これは正常に学習と予測が行えているのでしょうか。
間違っている場合はどこが違うのかをお教えいただけるとありがたいです。

Python

1import numpy 2import matplotlib.pyplot as plt 3from tensorflow.keras.models import Sequential 4from tensorflow.keras.layers import Dense,LSTM 5import pandas 6 7dataframe = pandas.read_csv('data.csv',index_col=0) 8 9dataset = dataframe.values 10dataset = dataset.astype('float32') 11data_max = dataframe.max() 12data_min = dataframe.min() 13 14for i in range(len(dataset)): 15  dataset[:,0][i] = (dataset[:,0][i] - data_min['Temperature']) / (data_max['Temperature'] - data_min['Temperature']) 16 dataset[:,1][i] = (dataset[:,1][i] - data_min['Day']) / (data_max['Day'] - data_min['Day']) 17train_size = int(len(dataset) * 0.7) 18test_size = len(dataset) - train_size 19train, test = dataset[0:train_size,:], dataset[train_size:len(dataset),:] 20 21def create_dataset(dataset, look_back=1): 22 dataX, dataY = [], [] 23 for i in range(len(dataset)-look_back-1): 24 xset = [] 25 for j in range(dataset.shape[1]): 26 a = dataset[i:(i+look_back), j] 27 xset.append(a) 28 dataY.append(dataset[i + look_back, 0]) 29 dataX.append(xset) 30 return numpy.array(dataX), numpy.array(dataY) 31 32look_back = 7 33trainX, trainY = create_dataset(train, look_back) 34testX, testY = create_dataset(test, look_back) 35 36trainX = numpy.reshape(trainX, (trainX.shape[0], trainX.shape[1], trainX.shape[2])) 37testX = numpy.reshape(testX, (testX.shape[0], testX.shape[1], testX.shape[2])) 38 39model = Sequential() 40model.add(LSTM(4, input_shape=(testX.shape[1], look_back))) 41model.add(Dense(1)) 42model.compile(loss='mean_squared_error', optimizer='adam') 43model.fit(trainX, trainY, epochs=100, batch_size=1, verbose=2) 44 45testPredict = model.predict(testX) 46testPredict = testPredict[0:30] 47testY = testY[0:30] 48for i in range(30): 49 testPredict[i] = testPredict[i] * (data_max['Temperature'] - data_min['Temperature']) + data_min['Temperature'] 50 testY[i] = testY[i] * (data_max['Temperature'] - data_min['Temperature']) + data_min['Temperature'] 51plt.plot(testPredict,label="testPredict") 52plt.plot(testY,label="testY") 53plt.legend() 54plt.show()

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

過学習しているように見えます。

直近7日分のデータを元に次の日の気温の予測

とのことですので、予測値は、学習に用いた直近7日間のデータと近い値が出て、予測グラフが一日遅れのように見えるのだと思います。
過学習を防ぐために、学習データの期間を1ヶ月、半年、1年......と増やしていくと、改善するのではないかと思います。

投稿2020/06/10 12:56

kabayan55

総合スコア389

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問