• 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))
  • 相关阅读:
    产业互联网,正在进入到深水区,人们对于产业互联网的认识才能够全面
    HarmonyOS应用侧与前端页面数据通道建立
    拼多多怎么引流商家?建议收藏的几个方法,拼多多引流脚本详细使用教学分享
    Python——time模块
    线上展厅怎么做要多长时间
    MySQL进阶学习
    【踩坑日记】vue项目ie打不开报错SCRIPT1006:缺少‘)‘
    小白入门深度学习 | 3-2:激活函数activation
    并发基础总结
    VR钢铁实训 | 铁前事业部虚拟仿真培训软件
  • 原文地址:https://blog.csdn.net/weixin_44992737/article/details/127948872