LSTM を使用して時系列シーケンス予測に取り組んでいます。私の目標は、次の 25 の値の予測を生成するために、25 の過去の値のウィンドウを使用することです。私はそれを再帰的に行っています: 25 個の既知の値を使用して次の値を予測します。その値を既知の値として追加し、25 個の値をシフトして、25 個の新しい値 (またはそれ以上) が生成されるまで、次の値を再度予測します。
「Keras」を使用して RNN アーキテクチャを実装しています。
regressor = Sequential()
regressor.add(LSTM(units = 50, return_sequences = True, input_shape = (X_train.shape[1], 1)))
regressor.add(Dropout(0.1))
regressor.add(LSTM(units = 50, return_sequences = True))
regressor.add(Dropout(0.1))
regressor.add(LSTM(units = 50))
regressor.add(Dropout(0.1))
regressor.add(Dense(units = 1))
regressor.compile(optimizer = 'rmsprop', loss = 'mean_squared_error')
regressor.fit(X_train, y_train, epochs = 10, batch_size = 32)
問題: 再帰的予測は、どのシーケンスが前に来ても常に何らかの値に収束します。
確かにこれは私が望んでいるものではありません.生成されたシーケンスは以前のものによって異なると予想していました.誰かがこの動作とそれを回避する方法について考えているかどうか疑問に思っています. たぶん私は何か間違ったことをしている...
さまざまなエポック数を試しましたが、あまり役に立ちませんでした。実際には、エポック数を増やすと悪化しました。Batch Size、 Number of Units 、 Number of Layers 、およびウィンドウ サイズを変更しても、この問題を回避することはできませんでした。
データには MinMaxScaler を使用しています。
編集:
テスト用の新しい入力のスケーリング:
dataset_test = sc.transform(dataset_test.reshape(-1, 1))