Machine learning LSTM预测时间序列会产生奇怪的结果

Machine learning LSTM预测时间序列会产生奇怪的结果,machine-learning,keras,time-series,lstm,rnn,Machine Learning,Keras,Time Series,Lstm,Rnn,我正试图预测未来几天的时间序列数据,看看过去几天,使用Keras。我的标签数据是未来多天的目标值,回归模型有多个输出神经元(时间序列的“直接方法”) 以下是使用60天历史记录预测10天的测试数据 如您所见,所有日期的未来值大致相同。我在这上面花了相当长的时间,必须承认我可能在LSTM方面遗漏了一些东西 以下是带有预测的训练数据: 为了确认我正在正确地准备数据,我创建了一个“跟踪数据集”,用于可视化数据转换。这是 数据集: Open、High、Low、Close、Volume、OpenInt

我正试图预测未来几天的时间序列数据,看看过去几天,使用Keras。我的标签数据是未来多天的目标值,回归模型有多个输出神经元(时间序列的“直接方法”)

以下是使用60天历史记录预测10天的测试数据

如您所见,所有日期的未来值大致相同。我在这上面花了相当长的时间,必须承认我可能在LSTM方面遗漏了一些东西

以下是带有预测的训练数据:

为了确认我正在正确地准备数据,我创建了一个“跟踪数据集”,用于可视化数据转换。这是

数据集:

Open、High、Low、Close、Volume、OpenInt
111,112,113,114,115,0
121,122,123,124,125,0
131,132,133,134,135,0
141,142,143,144,145,0
151,152,153,154,155,0
161,162,163,164,165,0
171,172,173,174,175,0
181,182,183,184,185,0
191,192,193,194,195,0
201,202,203,204,205,0
211,212,213,214,215,0
221,222,223,224,225,0
231,232,233,234,235,0
241,242,243,244,245,0
251,252,253,254,255,0
261,262,263,264,265,0
271,272,273,274,275,0
281,282,283,284,285,0
291,292,293,294,295,0
使用2天历史的训练集,预测3天的未来值(我使用了历史天数和未来天数的不同值,这对我来说都是有意义的),不使用功能缩放,以便可视化数据转换:

X列车(6、2、5)
[[[111 112 113 114 115]
[121 122 123 124 125]]
[[121 122 123 124 125]
[131 132 133 134 135]]
[[131 132 133 134 135]
[141 142 143 144 145]]
[[141 142 143 144 145]
[151 152 153 154 155]]
[[151 152 153 154 155]
[161 162 163 164 165]]
[[161 162 163 164 165]
[171 172 173 174 175]]]
Y型列车(6,3)
[[131 141 151]
[141 151 161]
[151 161 171]
[161 171 181]
[171 181 191]
[181 191 201]]
测试集

X测试(6,2,5)
[[[201 202 203 204 205]
[211 212 213 214 215]]
[[211 212 213 214 215]
[221 222 223 224 225]]
[[221 222 223 224 225]
[231 232 233 234 235]]
[[231 232 233 234 235]
[241 242 243 244 245]]
[[241 242 243 244 245]
[251 252 253 254 255]]
[[251 252 253 254 255]
[261 262 263 264 265]]]
Y检验(6,3)
[[221 231 241]
[231 241 251]
[241 251 261]
[251 261 271]
[261 271 281]
[271 281 291]]
型号:

def CreateRegressionor(自,
优化器='adam',
激活='tanh',#RNN激活
init_mode='glorot_uniform',
隐藏的神经元=50,
辍学率=0.0,
权重约束=0,
stateful=False,
#SGD参数
学习率=0.01,
动量=0):
如果权重约束>0,则内核约束=最大范数(权重约束),否则为无
模型=顺序()
添加(LSTM(单位=隐藏的神经元,激活=激活,内核初始化器=初始化模式,内核约束=内核约束,
return_sequences=True,input_shape=(self.X_train.shape[1],self.X_train.shape[2]),stateful=stateful))
模型添加(辍学(辍学率))
添加(LSTM(单位=隐藏的神经元,激活=激活,内核初始化器=初始化模式,内核约束=内核约束,
return_sequences=True,stateful=stateful))
模型添加(辍学(辍学率))
添加(LSTM(单位=隐藏的神经元,激活=激活,内核初始化器=初始化模式,内核约束=内核约束,
return_sequences=True,stateful=stateful))
模型添加(辍学(辍学率))
添加(LSTM(单位=隐藏的神经元,激活=激活,内核初始化器=初始化模式,内核约束=内核约束,
return_sequences=False,stateful=stateful))
模型添加(辍学(辍学率))
添加模型(密集(单位=self.y_train.shape[1]))
如果(优化器=='SGD'):
优化器=新加坡元(lr=学习率,动量=动量)
compile(优化器=优化器,loss='mean_squared_error')
回归模型
…我使用以下参数创建:

self.createRegressionor(优化器='adam',隐藏的神经元=100)
。。。然后像这样合适:

self.regressor.fit(self.X\u系列,self.y\u系列,历代=100,批量=32)
。。。并预测:

y_pred=self.regressor.predict(X_检验)
。。。或

y\u pred\u train=self.regressor.predict(X\u train)

我缺少什么?

您需要缩放…然后“取消缩放”您的outputs@MitchWheat我这样做是为了实际数据。我刚刚为这个数据集禁用了它来可视化我的数据转换,所以我可以确认我的数据数组生成正确。