当前位置:   article > 正文

lstm单变量单步预测_lstm单步预测

lstm单步预测

数据展示,利用dataframe.WetBulbCelsius.values读取即可。

一,数据读取

        使用pandas将dataframe二维格式的某一列直接读取出来即可。

  1. import numpy as np
  2. import pandas as pd
  3. data=pd.read_csv('re.csv')
  4. seq_test=data['WetBulbCelsius'].values

 二,时间窗口滑动生成数据集

  1. def split_sequence(sequence, look_back):
  2. X, y = [], []
  3. for i in range(len(sequence)):
  4. # 找到最后一次滑动所截取数据中最后一个元素的索引,
  5. # 如果这个索引超过原序列中元素的索引则不截取;
  6. end_element_index = i + look_back
  7. if end_element_index > len(sequence) - 1: # 序列中最后一个元素的索引
  8. break
  9. sequence_x, sequence_y = sequence[i:end_element_index], sequence[end_element_index] # 取最后一个元素作为预测值y
  10. X.append(sequence_x)
  11. y.append(sequence_y)
  12. #return X,y
  13. return np.array(X), np.array(y)
  14. #look_back参照历史多长的数据长度,一般作为的是LSTM(input_shape=(look_back,1)),这里的1表示一个特征,out_put为(None,look_back,1)),None表示batch_size未定
  15. look_back = 3
  16. seq_test_x, seq_test_y = split_sequence(seq_test, look_back)

 三,二维到三维转换

        添加samples到数据维度中。seq_test_x.shape[0]表示总共的序列长度。

seq_test_x_1 = seq_test_x.reshape((seq_test_x.shape[0], look_back, 1))

四,模型搭建

  1. from keras.models import Sequential
  2. from keras.layers import LSTM, Dense
  3. from keras.callbacks import LearningRateScheduler
  4. from keras import backend as K
  5. #-----------------------------------------------
  6. model = Sequential()
  7. model.add(LSTM(32, input_shape=(look_back, 1),return_sequences=True,activation='relu'))
  8. model.add(LSTM(16, activation='relu'))
  9. model.add(Dense(8))
  10. model.add(Dense(1))# 单步预测,1个神经元
  11. #-----------------------------------------------
  12. #-----------------------------------------------
  13. from keras.optimizers import Adam
  14. from keras.losses import mae
  15. model.compile(optimizer=Adam(0.01),loss='mae')
  16. #-----------------------------------------------
  17. #-----------------------------------------------
  18. # 动态调整学习率与提前终止函数
  19. def scheduler(epoch):
  20. # 每隔10个epoch,学习率减小为原来的1/10
  21. if epoch % 10 == 0 and epoch != 0:
  22. lr = K.get_value(model.optimizer.lr)
  23. if lr>1e-5:
  24. K.set_value(model.optimizer.lr, lr * 0.1)
  25. print("lr changed to {}".format(lr * 0.1))
  26. return K.get_value(model.optimizer.lr)
  27. reduce_lr = LearningRateScheduler(scheduler)

 五,模型训练

  1. model.fit(x=seq_test_x_1[:400],y=seq_test_y[:400],batch_size=2,epochs=40,verbose=2,callbacks=[reduce_lr])
  2. #这里的400依据数据长度进行修改,比如500个长度,前400个拿来训练,后100个拿来测试,lstm一般不需要validate验证,

六,预测与评估

  1. import matplotlib.pyplot as plt
  2. yre=yre.reshape(yre.shape[0])
  3. plt.figure(dpi=300,figsize=(20,1))
  4. plt.plot(yre,'b-',seq_test_y[400:],'r-')
  5. #这里的400依据数据长度进行修改,比如500个长度,前400个拿来训练,后100个拿来测试,lstm一般不需要validate验证,如果需要预测500之后的,利用450-500的数据生成滑动窗口,生成500之后的数据,再利用生成的数据生成新的滑动窗口进行预测

七,结果展示

        一些其他结论,比如r2_score可以添加。

  1. from sklearn.metrics import r2_score
  2. print(r2_score(seq_test_y[400:],yre))
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/569243
推荐阅读
相关标签
  

闽ICP备14008679号