之前一直用的是状态空间模型来预测利率,然后在知乎上看到时间序列预测用神经网络预测有奇效。下面就是用rnn(循环神经网络)来进行时间预测的过程。
一:将数据化为同一个单位,即标准化。
values=date_interest.values
values=values.astype('float32')
scaler=MinMaxScaler(feature_range=(0,1))
scaled=scaler.fit_transform(values)
这里我们用的是MinMaxScaler来对数据进行规范化。
二.对数据进行窗口分割,即确定用几个time steps去预测数据
dataX,dataY=[],[]
for i in range(len(dataset)-look_back-1):
a=dataset[i:(i+look_back)]
# 特征是长度为look_back的序列
dataX.append(a)
# 结果
dataY.append(dataset[i+look_back])
return np.array(dataX),np.array(dataY)
look_back就是用多少个数据去预测下一个数据。dataX相当于是特征,dataY则是标签。
三。切割数据集成训练集和测试集
count=len(data_x)
# 分割成训练集和测试集
train_X,train_y=data_x[:int(0.8*count)],data_y[:int(0.8*count)]
test_X,test_y=data_x[int(0.8*count):],data_y[int(0.8*count):]
四。对数据进行格式化,reshape成[样本,时间步长,特征]的形式
train_X=train_X.reshape((train_X.shape[0],1,train_X.shape[1]))
test_X=test_X.reshape((test_X.shape[0],1,test_X.shape[1]))
五。构建模型
model=Sequential()
# # 定义具有50个神经元的LSTM和用于预测污染的输出层中的一个神经元。
model.add(LSTM(50,input_shape=(train_X.shape[1],train_X.shape[2])))
model.add(Dense(1))
# # optimizer指定其优化器adam,loss指定误差规则,即平均绝对误差。
model.compile(loss='mae',optimizer='adam')
这里用的是LSTM来预测,也可以用rnn的其他变形。
六。利用模型预测
predict=model.predict(test_x)
上述就是利用rnn来进行时间序列预测的简单过程,详细过程可以参考:点击打开链接