• 时间序列预测—双向LSTM(Bi-LSTM)


            本文展示了使用双向LSTM(Bi-LSTM)进行时间序列预测的全过程,包含详细的注释。整个过程主要包括:数据导入、数据清洗、结构转化、建立Bi-LSTM模型、训练模型(包括动态调整学习率和earlystopping的设置)、预测、结果展示、误差评估等完整的时间序列预测流程。
      本文使用的数据集在本人上传的资源中,链接为mock_kaggle.csv

    代码如下:

    1. import pandas as pd
    2. import numpy as np
    3. import math
    4. import keras
    5. from matplotlib import pyplot as plt
    6. from matplotlib.pylab import mpl
    7. import tensorflow as tf
    8. from sklearn.preprocessing import MinMaxScaler
    9. from keras import backend as K
    10. from keras.layers import LeakyReLU
    11. from sklearn.metrics import mean_squared_error # 均方误差
    12. from keras.callbacks import LearningRateScheduler
    13. from keras.callbacks import EarlyStopping
    14. from tensorflow.keras import Input, Model,Sequential
    15. from keras.layers import Bidirectional#, Concatenate
    1. mpl.rcParams['font.sans-serif'] = ['SimHei'] #显示中文
    2. mpl.rcParams['axes.unicode_minus']=False #显示负号

    取数据

    1. data=pd.read_csv('mock_kaggle.csv',encoding ='gbk',parse_dates=['datetime'])
    2. Date=pd.to_datetime(data.datetime)
    3. data['date'] = Date.map(lambda x: x.strftime('%Y-%m-%d'))
    4. datanew=data.set_index(Date)
    5. series = pd.Series(datanew['股票'].values, index=datanew['date'])
    series
    
    1. date
    2. 2014-01-01 4972
    3. 2014-01-02 4902
    4. 2014-01-03 4843
    5. 2014-01-04 4750
    6. 2014-01-05 4654
    7. ...
    8. 2016-07-27 3179
    9. 2016-07-28 3071
    10. 2016-07-29 4095
    11. 2016-07-30 3825
    12. 2016-07-31 3642
    13. Length: 937, dtype: int64

    滞后扩充数据

    1. dataframe1 = pd.DataFrame()
    2. num_hour = 16
    3. for i in range(num_hour,0,-1):
    4. dataframe1['t-'+str(i)] = series.shift(i)
    5. dataframe1['t'] = series.values
    6. dataframe3=dataframe1.dropna()
    7. dataframe3.index=range(len(dataframe3))
    dataframe3
    
    t-16t-15t-14t-13t-12t-11t-10t-9t-8t-7t-6t-5t-4t-3t-2t-1t
    04972.04902.04843.04750.04654.04509.04329.04104.04459.05043.05239.05118.04984.04904.04822.04728.04464
    14902.04843.04750.04654.04509.04329.04104.04459.05043.05239.05118.04984.04904.04822.04728.04464.04265
    24843.04750.04654.04509.04329.04104.04459.05043.05239.05118.04984.04904.04822.04728.04464.04265.04161
    34750.04654.04509.04329.04104.04459.05043.05239.05118.04984.04904.04822.04728.04464.04265.04161.04091
    44654.04509.04329.04104.04459.05043.05239.05118.04984.04904.04822.04728.04464.04265.04161.04091.03964
    ......................................................
    9161939.01967.01670.01532.01343.01022.0813.01420.01359.01075.01015.0917.01550.01420.01358.02893.03179
    9171967.01670.01532.01343.01022.0813.01420.01359.01075.01015.0917.01550.01420.01358.02893.03179.03071
    9181670.01532.01343.01022.0813.01420.01359.01075.01015.0917.01550.01420.01358.02893.03179.03071.04095
    9191532.01343.01022.0813.01420.01359.01075.01015.0917.01550.01420.01358.02893.03179.03071.04095.03825
    9201343.01022.0813.01420.01359.01075.01015.0917.01550.01420.01358.02893.03179.03071.04095.03825.03642

    显示详细信息

    921 rows × 17 columns

    二折划分数据并标准化

    1. pd.DataFrame(np.random.shuffle(dataframe3.values)) #shuffle
    2. pot=len(dataframe3)-12
    3. train=dataframe3
  • 相关阅读:
    云服务器相比较物理服务器的好处有哪些?
    spring事务传播特性,即spring管理事务的策略
    基于知识蒸馏的两阶段去雨去雪去雾模型学习记录(二)之知识收集阶段
    【LeetCode】88. 合并两个有序数组
    便捷高效的文件批量备份与清理!轻松管理您的文件存储!
    语音识别翻译怎么做?这些方法值得收藏
    nodejs+Vue+Elementui的校园二手旧书交易交换平台sequelize
    记录 | docker权限原因导致service ssh start失败
    浅识JVM
    Java 入门练习(36 - 40)
  • 原文地址:https://blog.csdn.net/qq_19734597/article/details/134456719