我有一个时间序列数据集的训练数据集,如下所示:
import numpy as np
import pandas as pd
train_df = pd.DataFrame(np.random.randint(0,100,size=(100, 16)))
train_df.columns=['var1(t-3)','var2(t-3)','var3(t-3)','var4(t-3)','var1(t-2)','var2(t-2)','var3(t-2)','var4(t-2)','var1(t-1)','var2(t-1)','var3(t-1)','var4(t-1)','var1(t)','var2(t)','var3(t)','var4(t)']
train_X=train_df.drop(['var1(t)'],axis=1)
train_y=train_df[['var1(t)']]
正如你们在培训中看到的,我正在输入网络,包括所有4个变量的过去三个时间步和剩余三个变量的当前时间步,这三个变量构成了15个变量
我想在Keras中使用函数API的LSTM中对其进行培训,因为我不能在我的示例中使用顺序API。因此,我尝试了以下方法:
import tensorflow
from tensorflow.keras.utils import plot_model
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input
from tensorflow.keras.layers import Dense
from tensorflow.keras.layers import LSTM
visible = Input(shape=(100,15))
hidden1 = LSTM(10)(visible)
hidden2 = Dense(10, activation='relu')(hidden1)
output = Dense(1, activation='sigmoid')(hidden2)
model = Model(inputs=visible, outputs=output)
model.compile(loss='mae', optimizer='adam')
history = model.fit(train_X, train_y, batch_size=64, epochs=2, validation_split=0.2)
然后,我对列车进行改造,并进行如下测试:
train_X=train_X.reshape(train_X.shape[0],1,train_X.shape[1])
train_y = train_y.reshape(train_y.shape[0],1)
train_X shape is (100, 1, 15)
train_y shape is (100,1)
但这给出了一个非常大的MAPE和RMSE。所以我认为我的重塑是错误的
感谢您的帮助
原始答案:
LSTM接受3D输入,您将传递一个2D输入,该输入解释了
ValueError
。您应该预处理数据,使其满足要求[batch, timesteps, feature]
。您的数据应该以每行表示一个时间步的方式呈现让我们用4个变量创建虚拟数据
输出:
每行表示时间t的值。您需要回溯3个时间步来预测t=4时的
val1
现在我将对数据进行预处理,使其满足三维张量的要求。 我创建了一个函数,它将按如下方式进行预处理:
现在我们已经创建了3D张量,可以通过LSTM层了
希望这有帮助
编辑:
假设有3列具有特征,第4列包含目标值,则可以使用
由于您希望传递3个特性}要预测在时间上的{}值{},您可以再创建3个表示{}、
val1
,val2
&val3
利用它们在时间上的值{val2
中移位的特征&val3
使用输出:
现在,每行将包含}和{}或者你可以说时间{}&;时间
val1
、val2
&val3
在时间{t
创建此数据帧后,您可以创建时间序列,该时间序列将使用
相关问题 更多 >
编程相关推荐