• 拓端tecdat|Python用LSTM长短期记忆神经网络对不稳定降雨量时间序列进行预测分析


    原文链接:http://tecdat.cn/?p=23544 

    原文出处:拓端数据部落公众号

    下面是一个关于如何使用长短期记忆网络(LSTM)来拟合一个不稳定的时间序列的例子。

    每年的降雨量数据可能是相当不稳定的。与温度不同,温度通常在四季中表现出明显的趋势,而雨量作为一个时间序列可能是相当不稳定的。夏季的降雨量与冬季的降雨量一样多是很常见的。

    下面是某地区2020年11月降雨量的图解。

    作为一个连续的神经网络,LSTM模型可以证明在解释时间序列的波动性方面有优势。

    使用Ljung-Box检验,小于0.05的p值表明这个时间序列中的残差表现出随机模式,表明有明显的波动性。

    >>> sm.stats.acorr_ljungbox(res.resid, lags=[10])
    

    Ljung-Box检验

    Dickey-Fuller 检验

     

    数据操作和模型配置

    该数据集由722个月的降雨量数据组成。

    选择712个数据点用于训练和验证,即用于建立LSTM模型。然后,过去10个月的数据被用来作为测试数据,与LSTM模型的预测结果进行比较。

    下面是数据集的一个片段。

    然后形成一个数据集矩阵,将时间序列与过去的数值进行回归。

    1.  
      # 形成数据集矩阵
    2.  
       
    3.  
      for i in range(len(df)-previous-1):
    4.  
      a = df[i:(i+previous), 0]
    5.  
      dataX.append(a)
    6.  
      dataY.append(df[i + previous, 0])

    然后用MinMaxScaler对数据进行标准化处理。

    将前一个参数设置为120,训练和验证数据集就建立起来了。作为参考,previous = 120说明模型使用从t - 120到t - 1的过去值来预测时间t的雨量值。

    前一个参数的选择要经过试验,但选择120个时间段是为了确保识别到时间序列的波动性或极端值。

    1.  
      # 训练和验证数据的划分
    2.  
      train_size = int(len(df) * 0.8)
    3.  
      val_size = len(df) - train_size
    4.  
      train, val = df[0:train_size,:], df[train_size:len(df),:]# 前期的数量
    5.  
      previous = 120

    然后,输入被转换为样本、时间步骤、特征的格式。 

    1.  
      # 转换输入为[样本、时间步骤、特征]。
    2.  
      np.reshape(X_train, (shape[0], 1, shape[1]))

    模型训练和预测

    该模型在100个历时中进行训练,并指定了712个批次的大小(等于训练和验证集中的数据点数量)。

    1.  
      # 生成LSTM网络
    2.  
      model = tf.keras.Sequential()
    3.  
      # 列出历史中的所有数据
    4.  
      print(history.history.keys())
    5.  
      # 总结准确度变化
    6.  
      plt.plot(history.history['loss'])

    下面是训练集与验证集的模型损失的关系图。

    预测与实际降雨量的关系图也被生成。

    1.  
      # 绘制所有预测图
    2.  
      plt.plot(valpredPlot)

    预测结果在平均方向准确性(MDA)、平均平方根误差(RMSE)和平均预测误差(MFE)的基础上与验证集进行比较。 

    1.  
      mda(Y_val, predictions)0.9090909090909091
    2.  
      >>> mse = mean_squared_error(Y_val, predictions)
    3.  
      >>> rmse = sqrt(mse)
    4.  
      >>> forecast_error
    5.  
      >>> mean_forecast_error = np.mean(forecast_error)

     

     

    • MDA: 0.909
    • RMSE: 48.5
    • MFE: -1.77

    针对测试数据进行预测

    虽然验证集的结果相当可观,但只有将模型预测与测试(或未见过的)数据相比较,我们才能对LSTM模型的预测能力有合理的信心。

    如前所述,过去10个月的降雨数据被用作测试集。然后,LSTM模型被用来预测未来10个月的情况,然后将预测结果与实际值进行比较。

    至t-120的先前值被用来预测时间t的值。

    1.  
      # 测试(未见过的)预测
    2.  
      np.array([tseries.iloctseries.iloc,t

    获得的结果如下

    • MDA: 0.8
    • RMSE: 49.57
    • MFE: -6.94

    过去10个月的平均降雨量为148.93毫米,预测精度显示出与验证集相似的性能,而且相对于整个测试集计算的平均降雨量而言,误差很低。

    结论

    在这个例子中,你已经看到:

    • 如何准备用于LSTM模型的数据
    • 构建一个LSTM模型
    • 如何测试LSTM的预测准确性
    • 使用LSTM对不稳定的时间序列进行建模的优势

    最受欢迎的见解

    1.用于NLP的Python:使用Keras的多标签文本LSTM神经网络分类

    2.Python中利用长短期记忆模型LSTM进行时间序列预测分析 – 预测电力消耗数据

    3.python在Keras中使用LSTM解决序列问题

    4.Python中用PyTorch机器学习分类预测银行客户流失模型

    5.R语言多元Copula GARCH 模型时间序列预测

    6.在r语言中使用GAM(广义相加模型)进行电力负荷时间序列分析

    7.R语言中ARMA,ARIMA(Box-Jenkins),SARIMA和ARIMAX模型用于预测时间序列数

    8.R语言估计时变VAR模型时间序列的实证研究分析案例

    9.用广义加性模型GAM进行时间序列分析

    ▍关注我们 【大数据部落】第三方数据服务提供商,提供全面的统计分析与数据挖掘咨询服务,为客户定制个性化的数据解决方案与行业报告等。 ▍咨询链接:http://y0.cn/teradat ▍联系邮箱:3025393450@qq.com
  • 相关阅读:
    团队冲刺第五天
    团队冲刺第四天
    学习进度条---第八周
    团队冲刺第三天
    团队冲刺第二天
    团队冲刺第一天
    学习进度条--第七周
    课堂练习--第7周(两人结对)
    学习进度条--第六周
    第一次 在Java课上的编程
  • 原文地址:https://www.cnblogs.com/tecdat/p/15196499.html
Copyright © 2020-2023  润新知