RNN循环神经网络 、LSTM长短期记忆网络实现时间序列长期利率预测

简介: RNN循环神经网络 、LSTM长短期记忆网络实现时间序列长期利率预测

2017 年年中,R 推出了 Keras 包 _,_这是一个在 Tensorflow 之上运行的综合库,具有 CPU 和 GPU 功能。本文将演示如何在 R 中使用 LSTM 实现时间序列预测。


简单的介绍

时间序列涉及按时间顺序收集的数据。我用 xt∈R 表示单变量数据,其中 t∈T 是观察数据时的时间索引。时间 t 在 T=Z 的情况下可以是离散的,或者在 T=R 的情况下是连续的。为简化分析,我们将仅考虑离散时间序列。

长短期记忆 (LSTM) 网络是一种特殊的循环神经网络 (RNN),能够学习长期依赖关系。在常规的 RNN 中,小权重通过几个时间步一遍又一遍地相乘,并且梯度逐渐减小到零——这种情况称为梯度消失问题。

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

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 月的月度数据。

前五个观察样本

数据准备

将数据转换为平稳数据

这是通过获取系列中两个连续值之间的差异来完成的。这种转换(通常称为差分)会删除数据中与时间相关的成分。此外,使用差分而不是原始值更容易建模,并且生成的模型具有更高的预测能力。

#将数据转换为平稳性
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)\]
     
}

绘制值



相关文章
|
18天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GRU网络的MQAM调制信号检测算法matlab仿真,对比LSTM
本研究基于MATLAB 2022a,使用GRU网络对QAM调制信号进行检测。QAM是一种高效调制技术,广泛应用于现代通信系统。传统方法在复杂环境下性能下降,而GRU通过门控机制有效提取时间序列特征,实现16QAM、32QAM、64QAM、128QAM的准确检测。仿真结果显示,GRU在低SNR下表现优异,且训练速度快,参数少。核心程序包括模型预测、误检率和漏检率计算,并绘制准确率图。
84 65
基于GRU网络的MQAM调制信号检测算法matlab仿真,对比LSTM
|
9天前
|
机器学习/深度学习 数据采集 算法
基于PSO粒子群优化的CNN-LSTM-SAM网络时间序列回归预测算法matlab仿真
本项目展示了基于PSO优化的CNN-LSTM-SAM网络时间序列预测算法。使用Matlab2022a开发,完整代码含中文注释及操作视频。算法结合卷积层提取局部特征、LSTM处理长期依赖、自注意力机制捕捉全局特征,通过粒子群优化提升预测精度。适用于金融市场、气象预报等领域,提供高效准确的预测结果。
|
15天前
|
机器学习/深度学习 数据采集 算法
基于GA遗传优化的CNN-LSTM-SAM网络时间序列回归预测算法matlab仿真
本项目使用MATLAB 2022a实现时间序列预测算法,完整程序无水印。核心代码包含详细中文注释和操作视频。算法基于CNN-LSTM-SAM网络,融合卷积层、LSTM层与自注意力机制,适用于金融市场、气象预报等领域。通过数据归一化、种群初始化、适应度计算及参数优化等步骤,有效处理非线性时间序列,输出精准预测结果。
|
3月前
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
96 17
|
3月前
|
存储 SQL 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。
|
3月前
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将从网络安全漏洞、加密技术和安全意识三个方面进行探讨,旨在提高读者对网络安全的认识和防范能力。通过分析常见的网络安全漏洞,介绍加密技术的基本原理和应用,以及强调安全意识的重要性,帮助读者更好地保护自己的网络信息安全。
67 10
|
3月前
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在数字化时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术和安全意识等方面的内容,并提供一些实用的代码示例。通过阅读本文,您将了解到如何保护自己的网络安全,以及如何提高自己的信息安全意识。
83 10
|
3月前
|
存储 监控 安全
云计算与网络安全:云服务、网络安全、信息安全等技术领域的融合与挑战
本文将探讨云计算与网络安全之间的关系,以及它们在云服务、网络安全和信息安全等技术领域中的融合与挑战。我们将分析云计算的优势和风险,以及如何通过网络安全措施来保护数据和应用程序。我们还将讨论如何确保云服务的可用性和可靠性,以及如何处理网络攻击和数据泄露等问题。最后,我们将提供一些关于如何在云计算环境中实现网络安全的建议和最佳实践。
|
3月前
|
监控 安全 网络安全
网络安全与信息安全:漏洞、加密与意识的交织
在数字时代的浪潮中,网络安全与信息安全成为维护数据完整性、保密性和可用性的关键。本文深入探讨了网络安全中的漏洞概念、加密技术的应用以及提升安全意识的重要性。通过实际案例分析,揭示了网络攻击的常见模式和防御策略,强调了教育和技术并重的安全理念。旨在为读者提供一套全面的网络安全知识框架,从而在日益复杂的网络环境中保护个人和组织的资产安全。
|
3月前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在数字化时代,网络安全和信息安全已成为我们日常生活中不可或缺的一部分。本文将深入探讨网络安全漏洞、加密技术和安全意识等方面的问题,并提供一些实用的建议和解决方案。我们将通过分析网络攻击的常见形式,揭示网络安全的脆弱性,并介绍如何利用加密技术来保护数据。此外,我们还将强调提高个人和企业的安全意识的重要性,以应对日益复杂的网络威胁。无论你是普通用户还是IT专业人士,这篇文章都将为你提供有价值的见解和指导。

热门文章

最新文章