使用多层感知器(MLP)的单变量时间序列多步预测

时间:2017-09-08 14:04:26

标签: neural-network time-series keras perceptron

我有一个单变量的时间序列数据。我想做一个多步预测。

我遇到了this问题,该问题解释了时间序列一步预测。 但我对多步预测有兴趣。

例如,典型的单变量时间序列数据看起来像

    time  value
    ----  ------
    t1      a1
    t2      a2
    ..........
    ..........
    t100    a100.

假设,我想提前3步预测。 我能解决我的问题吗

   TrainX                 TrainY
[a1,a2,a3,a4,a5,a6]   -> [a7,a8,a9]
[a2,a3,a4,a5,a6,a7]   -> [a8,a9,a10]
[a3,a4,a5,a6,a7,a8]   -> [a9,a10,a11]
..................        ...........
..................        ...........

我使用keras和tensorflow作为后端

第一层有50个神经元,预计有6个输入。 隐藏层有30个神经元 输出层有3个神经元,即(输出三个时间序列值)

model = Sequential()
model.add(Dense(50, input_dim=6, activation='relu',kernel_regularizer=regularizers.l2(0.01)))
model.add(Dense(30, activation='relu',kernel_regularizer=regularizers.l2(0.01)))
model.add(Dense(3))
model.compile(loss='mean_squared_error', optimizer='adam')

model.fit(TrainX, TrainY, epochs=300, batch_size=16)

我的模型将能够预测a107,a108,a109 ,当我的输入是a101,a102,a103,a104,a105,a106 这是一个有效的模型吗?我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

该模型可能会这样做,但您应该可以从使用interface CompanyData { company_name: string; company_id: number; company_website: string; } interface ProductData { category_id: number; product_name: string; price: Price; } interface Price { price_in: number; price_out: number; } class Test { public companyData: CompanyData = { company_name: '', company_id: 0, company_website: '' }; public productData: ProductData = { category_id: 0, product_name: '', price: { price_in: 0, price_out: 0 } }; } 层(序列的循环网络)中受益。

LSTM

您可能缺少一个激活功能,可将结果限制为您要预测的值的可能范围。

我们经常使用从0到1(#TrainX.shape = (total of samples, time steps, features per step) #TrainX.shape = (total of samples, 6, 1) model.add(LSTM(50,input_shape=(6,1),return_sequences=True, ....)) model.add(LSTM(30,return_sequences=True, ....)) model.add(LSTM(3,return_sequences=False, ....)) )或从-1到1(activation='sigmoid')的值。
这也需要输入限于这些值,因为输入和输出是相同的。