关于数据挖掘:RNN循环神经网络-LSTM长短期记忆网络实现时间序列长期利率预测附代码数据

44次阅读

共计 3503 个字符,预计需要花费 9 分钟才能阅读完成。

全文链接:http://tecdat.cn/?p=25133

最近咱们被客户要求撰写对于神经网络的钻研报告,包含一些图形和统计输入。

2017 年年中,R 推出了 Keras 包 _,_这是一个在 Tensorflow 之上运行的综合库,具备 CPU 和 GPU 性能

本文将演示如何在 R 中应用 LSTM 实现工夫序列预测。

简略的介绍

工夫序列波及按工夫程序收集的数据。我用 xt∈R 示意单变量数据,其中 t∈T 是察看数据时的工夫索引。工夫 t 在 T=Z 的状况下能够是离散的,或者在 T=R 的状况下是间断的。为简化剖析,咱们将仅思考离散工夫序列。

长短期记忆 (LSTM) 网络是一种非凡的循环神经网络 (RNN),可能学习长期依赖关系。在惯例的 RNN 中,小权重通过几个工夫步一遍又一遍地相乘,并且梯度逐步减小到零——这种状况称为梯度隐没问题。

LSTM 网络通常由通过层连贯的内存块(称为单元)组成。单元中的信息同时蕴含在单元状态 Ct 和暗藏状态 ht 中,并由称为门的机制通过 sigmoid 和 tanh 激活函数进行调节。

sigmoid 函数 / 层输入 0 到 1 之间的数字,其中 0 示意 没有通过,1 示意 _全副通过_。因而,LSTM 可能有条件地从单元状态中增加或删除信息。

一般来说,门将前一时间步 ht-1 和以后输出 xt 的暗藏状态作为输出,并将它们逐点乘以权重矩阵 W,并将偏差 b 增加到乘积中。

三个次要门:

  • 忘记门:
  • 这决定了哪些信息将从单元状态中删除。
  • 输入是一个介于 0 和 1 之间的数字,0 示意 全副删除 ,1 示意  全副记住
  • 更新门:
  • 在这一步中,tahn 激活层创立一个潜在候选向量,如下所示:
  • sigmoid 层创立一个更新过滤器,如下所示:
  • 接下来,旧单元状态 Ct-1 更新如下:
  • 输入门:
  • 在这一步中,sigmoid 层过滤将要输入的单元状态。
  • 而后将单元状态 Ct 通过 tanh 函数将值标准化到范畴 [-1, 1]。
  • 最初,标准化后的单元格状态乘以过滤后的输入,失去暗藏状态 ht 并传递给下一个单元格:

加载必要的库和数据集

# 加载必要的包
library(keras)

或者装置如下:

# 而后按如下形式装置 TensorFlow:install_keras()

咱们将应用可用的长期利率数据,这是从 2007 年 1 月到 2018 年 3 月的月度数据。

前五个察看样本


点击题目查阅往期内容

R 语言 KERAS 用 RNN、双向 RNNS 递归神经网络、LSTM 剖析预测温度工夫序列、IMDB 电影评分情感

左右滑动查看更多

01

02

03

04

数据筹备

将数据转换为安稳数据

这是通过获取系列中两个间断值之间的差别来实现的。这种转换(通常称为差分)会删除数据中与工夫相干的成分。此外,应用差分而不是原始值更容易建模,并且生成的模型具备更高的预测能力。

# 将数据转换为平稳性
did = diff
head

滞后数据集

LSTM 冀望数据处于监督学习模式。也就是说,有一个指标变量 Y 和预测变量 X。为了实现这一点,咱们通过滞后序列来变换序列,并将工夫 (t−k)的值作为输出,将工夫 t 的值作为输入,用于 k 步滞后数据集。

sps= laorm
head(sps)

将数据集拆分为训练集和测试集

与大多数剖析中训练和测试数据集是随机抽样的不同,对于工夫序列数据,察看的程序的确很重要。以下代码将系列的 前 70% 作为训练集,其余 30% 作为测试集。

## 分成训练集和测试集

N = nrow
n = round
tran = sud[1:n,]
tt  = sud[(n+1):N,  ]

标准化数据

就像在任何其余神经网络模型中一样,咱们将输出数据 X 从新标准化到激活函数的范畴。如前所述,LSTM 的默认激活函数是 sigmoid 函数,其范畴为 [-1, 1]。上面的代码将有助于这种转换。请留神,训练数据集的最小值和最大值是用于标准化训练和测试数据集以及预测值的标准化系数。这确保了测试数据的最小值和最大值不会影响模型。

## 标准化数据



Sad = scaa(trin, et, c(-1, 1))

y_in = Sed$slrn[, 2]
x_tn = Scd$sldin[, 1]

y_st = Sald$sleet[, 2]
x_st = Saed$sett[, 1]

将须要以下代码将预测值复原为原始比例。

## 逆变换
invtg = function(sle, slr, fue = c(0, 1))

定义

定义模型

咱们设置参数 stateful = TRUE 以便在解决一批样本后取得的外部状态被从新用作下一批样本的初始状态。因为网络是有状态的,咱们必须从以后 [samples ,  features ] 中以 [ _samples_ ,  timesteps ,  features ]模式的 3 维数组提供输出批次,其中:

样本:每批中的察看数,也称为批大小。

工夫步长:给定察看的独自工夫步长。在此示例中,工夫步长 = 1

特色:对于单变量状况,如本例所示,特色 = 1

批量大小必须是训练样本和测试样本大小的独特因素。能够找到 LSTM 输出的一个很好的解释

# 将输出重塑为 3- 维

# 指定所需的参数

bahse = 1 # 必须是训练样本和测试样本的公因子
ni = 1 # 能够调整这个,在模型调整阶段

#====================

keras_model_sequential
layer_lstm%>%
   layer_dense

编译模型

在这里,我将 mean\_squared\_error_指定 为损失函数,将_自适应_矩_预计  _Adam_指定为优化算法,并在每次更新时指定学习率和学习率衰减。最初,我应用  准确性 作为评估模型性能的指标。

compile(optimizer = optimizer_adam)

模型汇总

summary

拟合模型

咱们设置参数 shuffle  = FALSE 以防止打乱训练集并放弃 xi 和 xi+t 之间的依赖关系。LSTM 还须要在每个 epoch 之后重置网络状态。为了实现这一点,咱们在 epoch 上运行一个循环,在每个 epoch 中咱们拟合模型并通过参数 _reset_states()_重置状态。

for(i in 1:phs){
  model %>% fit
  model %>% reset_states
}

作出预测

for(i in 1:L){
      # 逆标准化
      yhat = invert_scaling
      # 逆差分
      yhat = yhat + Sis[(n+i)]
     
}

绘制值


本文摘选 R 语言用 RNN 循环神经网络、LSTM 长短期记忆网络实现工夫序列长期利率预测 ,点击“ 浏览原文”获取全文残缺材料。


点击题目查阅往期内容

联合新冠疫情 COVID-19 股票价格预测:ARIMA,KNN 和神经网络工夫序列剖析
深度学习:Keras 应用神经网络进行简略文本分类剖析新闻组数据
用 PyTorch 机器学习神经网络分类预测银行客户散失模型
PYTHON 用 LSTM 长短期记忆神经网络的参数优化办法预测工夫序列洗发水销售数据
Python 用 Keras 神经网络序列模型回归拟合预测、准确度检查和后果可视化
Python 用 LSTM 长短期记忆神经网络对不稳固降雨量工夫序列进行预测剖析
R 语言中的神经网络预测工夫序列:多层感知器(MLP)和极限学习机(ELM)数据分析报告
R 语言深度学习:用 keras 神经网络回归模型预测工夫序列数据
Matlab 用深度学习长短期记忆(LSTM)神经网络对文本数据进行分类
R 语言 KERAS 深度学习 CNN 卷积神经网络分类辨认手写数字图像数据(MNIST)
MATLAB 中用 BP 神经网络预测人体脂肪百分比数据
Python 中用 PyTorch 机器学习神经网络分类预测银行客户散失模型
R 语言实现 CNN(卷积神经网络)模型进行回归数据分析
SAS 应用鸢尾花 (iris) 数据集训练人工神经网络 (ANN) 模型
【视频】R 语言实现 CNN(卷积神经网络)模型进行回归数据分析
Python 应用神经网络进行简略文本分类
R 语言用神经网络改良 Nelson-Siegel 模型拟合收益率曲线剖析
R 语言基于递归神经网络 RNN 的温度工夫序列预测
R 语言神经网络模型预测车辆数量工夫序列
R 语言中的 BP 神经网络模型剖析学生问题
matlab 应用长短期记忆(LSTM)神经网络对序列数据进行分类
R 语言实现拟合神经网络预测和后果可视化
用 R 语言实现神经网络预测股票实例
应用 PYTHON 中 KERAS 的 LSTM 递归神经网络进行工夫序列预测
python 用于 NLP 的 seq2seq 模型实例: 用 Keras 实现神经网络机器翻译
用于 NLP 的 Python:应用 Keras 的多标签文本 LSTM 神经网络分类

正文完
 0