我花了几个月的时间阅读了无数的帖子,但我仍然感到像最初一样困惑。希望有人能帮到我。
问题:我想使用时间序列来预测特定地点的天气数据。
设置:
X1
和 X2
都是包含10年每日指数值的向量(每个向量总共3650个值)。
Y
是纽瓦克机场的温度时间序列(T
),涵盖10年的每一天(3650天)。
有很强的理由表明 X1
和 X2
可以用作 Y
的预测因子。所以我将所有数据分成100天的窗口,并创建以下内容:
X1 = (3650,100,1)X2 = (3650,100,1)
例如,窗口1包括从 t=0
到 t=99
的值,窗口2包括从 t=1
到 t=100
的值,依此类推。(假设我在末尾有足够的额外数据,我们仍然有3650个窗口)。
我从其他教程中学到,要进入Keras,我会这样做:
X = (3650,100,2) = (#_of_windows,window_length,#_of_predictors)
这是通过合并 X1
和 X2
得到的。
然后我有以下代码:
model = Sequential()model.add(LSTM(1,return_sequences=True,input_shape=(100,2)))model.add(LSTM(4))model.add(Dropout(0.2))model.compile(loss='mean_square_error',optimizer='rmsprop',shuffle=True)model.fit(X,Y,batch_size=128,epochs=2) # Y is shape (3650,)predictions = model.predict(?????????????)
所以我的问题是,如何设置 model.predict 部分以获取未来 N
天的预测?有时候我可能需要2天的预测,有时候可能需要2周的。我只需要得到 N
个值(形状:[N,]
),我不需要得到窗口或其他类似的东西。
非常感谢!
回答:
你能预测的唯一格式是你训练模型时使用的格式。如果我理解正确的话,你的模型是按如下方式训练的:
你使用了大小为100的窗口(即,时间 T-99,T-98,...,T
的特征)来预测时间 T
的目标值。
如果确实如此,那么你能用这个模型做的唯一预测就是相同类型的预测。也就是说,你可以提供100天的特征值,并要求模型预测这100天中最后一天的目标值。
如果你想让它能够预测 N
天,你必须相应地训练你的模型。也就是说,Y
中的每个元素都应该包含 N
天的序列。这里有一篇博客文章描述了如何做到这一点。