如何解决用ANN进行时间序列预测
我正在尝试使用不同的输入和参数使用ANN预测未来10分钟的功耗。该数据库每10分钟记录26000多个样本。下图是数据库的一部分。
Date_time Consumption
0 2016-10-01 00:00:00 2781
1 2016-10-01 00:10:00 3729
2 2016-10-01 00:20:00 3357
3 2016-10-01 00:30:00 2609
4 2016-10-01 00:40:00 3025
为了预测“ t”,我将其用作输入:
- 最近6个周期(t-1至t-6);
- 最近4天(t-144,t-288,t-432和t-576);
- 最近3个周期,同时4天;
- 最近3个周期,4天和4周(t-1008,t-2016,t-3024,t-4032)。
我使用了pandas shift函数来创建具有滞后特征的新列,然后删除了NaN值。我将20%的数据设置为测试集,然后应用MinMaxScaler转换功能。
对于每种输入配置,我都进行了网格搜索以找到最佳参数。下面的代码显示了用于拟合模型的功能。
def model_fit(train_x,train_y,model_config):
# reset keras
clear_session()
# model_config contains the parameters of the model
n_layers,n_nodes,activation,n_batch = model_config
model = Sequential()
# the shape of the input layer is given by the number of features
model.add(InputLayer(input_shape=(train_x.shape[1],)))
# model.add(Dropout(0.2))
for layers in range(n_layers):
model.add(Dense(n_nodes,activation=activation
)
)
model.add(Dense(1))
model.compile(loss='mse',optimizer=Adam(0.01),metrics=['mse','mae'])
model.summary()
earlystop = EarlyStopping(monitor='val_mse')
# 15% of the training set will be used to validate the model
model.fit(train_x,validation_split=0.15,callbacks = [earlystop],epochs=1500,batch_size=n_batch,shuffle=False,verbose=1
)
return model
尝试了几种参数组合后,我发现配置3的效果最佳。
MODEL CONFIGURATION: (n_layers=1,n_nodes=48,activation='relu',n_batch=50)
Training RMSE: 429.3599853515625
Validation RMSE: 223.30999755859375
Training MAE: 271.6600036621094
Validation MAE: 159.44000244140625
Test RMSE: 227.69
Test MAE: 167.88
以上结果表明ANN只是使用't-1'来预测't'。但是,通过查看第一个图中的模式,在我看来该模型可以做得更好。我发现了一些类似的问题,并且已经尝试了一些建议。使用辍学时,移动/延迟的预测问题似乎消失了(如下图)。我还尝试使用时间(用余弦和正弦变换为周期性)作为输入。但是,结果要糟糕得多,现在我真的不知道该怎么办。
================================================ ================
在处理整个数据库之前,我尝试使用较小的数据库开发模型,该数据库每小时进行一次测量,并且运行良好。输入是时间(用余弦和正弦转换),最后一个期间的消耗量(t-1)和同一时间的最后一天的消耗量(t-24)。下图显示了结果。
MODEL CONFIGURATION: (n_layers=1,activation='tanh',n_batch=50)
MODEL RMSE: 354.76
MODEL MAE: 283.97
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。