我有一个单变量的时间序列数据。我想做一个多步预测。
我遇到了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 这是一个有效的模型吗?我错过了什么吗?
答案 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'
)的值。
这也需要输入限于这些值,因为输入和输出是相同的。