Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >RNN循环神经网络 、LSTM长短期记忆网络实现时间序列长期利率预测

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

作者头像
拓端
发布于 2025-04-28 05:20:59
发布于 2025-04-28 05:20:59
27600
代码可运行
举报
文章被收录于专栏:拓端tecdat拓端tecdat
运行总次数:0
代码可运行

全文链接: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 中,并由称为门的机制通过 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 并传递给下一个单元格:

加载必要的库和数据集

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 加载必要的包
library(keras)

或者安装如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 然后按如下方式安装 TensorFlow :
install_keras()

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

前五个观察样本

数据准备

将数据转换为平稳数据

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#将数据转换为平稳性
did = diff
head

滞后数据集

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sps= laorm
head(sps)

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## 分成训练集和测试集

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

标准化数据

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## 标准化数据



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\]

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## 逆变换
invtg = function(sle, slr, fue = c(0, 1))

定义

定义模型

我们设置参数 stateful = TRUE 以便在处理一批样本后获得的内部状态被重新用作下一批样本的初始状态。由于网络是有状态的,我们必须从当前 [ samples , features ] 中以 [ _samples_ , timesteps , features ]形式的 3 维数组提供输入批次,其中:

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

时间步长:给定观察的单独时间步长。在此示例中,时间步长 = 1

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

批量大小必须是训练样本和测试样本大小的共同因素。可以找到 LSTM 输入的一个很好的解释

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 将输入重塑为 3-维

# 指定所需的参数

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

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

keras\_model\_sequential
layer_lstm%>%
   layer_dense

编译模型

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
compile(

  optimizer = optimizer_adam
)

模型汇总

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
summary

拟合模型

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for(i in 1:phs ){
  model %>% fit
  model %>% reset_states
}

作出预测

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for(i in 1:L){
      # 逆标准化
      yhat = invert_scaling
      # 逆差分
      yhat = yhat + Sis\[(n+i)\]
     
}

绘制值

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-04-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 拓端数据部落 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Halo博客主题开发之页面变量调用示范整理
今天老蒋再分享一篇Halo轻量博客相关的文章,也是关于主题开发的。一般我们在使用WP或者ZBP博客程序的时候开发主题,是不是有需要页面调用变量的。同样在Halo博客主题的时候也是如此。在前面,我们也有介绍到"Halo博客主题开发之全局变量模板标签调用整理"。这里我们将页面的变量调用实际以实际的案例使用整理。
老蒋
2021/12/22
4930
37个常用Halo Java轻量博客页面模板标签调用(快速调用页面数据)
这篇文章应该算是Halo Java轻量博客程序的最后一篇主题开发的最后篇文章。在前面老蒋有整理到Halo页面调用、公共模板、全局变量的调用。这里我们是不是有需要页面模板标签的调用,比如最新文章、菜单、图片组的调用,这篇文章是比较全的37个Halo页面模板标签调用整理。
老蒋
2021/12/22
8070
Halo博客主题模板开发之公共宏模板代码规范
我们在开发Halo轻量博客主题的时候,还需要了解他们内部的封装模板。在这里,老蒋整理来自Halo官方的公共宏模板代码规范。我们将某些常见的全局变量封装成了一个公共模板,我们只需要引入该模板,然后调用其中的宏模板即可。
老蒋
2021/12/22
6390
博客从 typecho 迁移到 Hexo
Hexo 环境搭建 使用 coding 和 github.io 的 pages 服务,绑定了自己的域名,做了双线解析,国内用户解析到 coding ,国外用户解析到 github.io,访问速度很满意(本来就是静态文件,访问速度很快)。 Hexo 环境的搭建,这里不再赘述,主要介绍如何导出 typecho 的数据和 Hexo 站点的配置以及 Next 主题的配置及优化。 typecho 数据导出 文章数据的导出 花了点时间把 typecho 的文章全部改写成 Markdown 的格式,方便我导出为 md 文
tanmx
2018/07/16
2.4K0
Linux下使用 github+hexo 搭建个人博客04-next主题优化
本篇讲解 next 主题的优化,包括:使用语言、前端页面显示宽度、菜单、侧栏、头像、添加或取消动画效果、打赏功能等等。
踏歌行
2020/10/15
1.2K0
Linux下使用 github+hexo 搭建个人博客04-next主题优化
halo博客主题美化
代码如下,在需要的页面加入或者统一放在header.ftl中,应为大部分页面都会用到header.ftl
晓果冻
2022/09/08
1.1K0
halo博客主题美化
使用hexo和码云pages搭建个人博客
GitHub上面的博客就无法用了,所以使用Hexo和码云pages搭建个人博客这个方案进入了我的视线…
全栈程序员站长
2021/04/07
5530
Halo博客的部署和使用
Halo 是一个强大易用的开源建站工具,拥有丰富的主题模板和插件,帮助用户快速搭建属于自己的博客系统。
M.Talen
2024/05/22
7640
Halo博客的部署和使用
Hexo+Github 博客搭建之 Matery 主题安装配置篇
这是一个采用 Material Design 和响应式设计的 Hexo 博客主题。
DeROy
2020/11/04
1.3K0
Hexo+Github 博客搭建之 Matery 主题安装配置篇
基于Github&Hexo的个人博客搭建过程
在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识点,期间也会分享一些好玩的项目。现在就让我们一起进入 Web 前端学习的冒险之旅吧!
Daotin
2018/12/04
8560
基于Github&Hexo的个人博客搭建过程
Typecho主题开发/二次开发常用代码功能整理备用
目前我们在使用的博客CMS程序中,可能较多的网友会使用WordPress,毕竟提供的免费主题、插件以及文档是比较多的,主要是用户量确实比较多。其次国内的免费博客CMS中,ZBLOG和Typecho是小众用户群,不能说不行,只能说用户量相对比较小。但是老蒋个人认为有用作个人博客日志的还是可以用的。
老蒋
2021/12/24
4910
github pages + Hexo + 域名绑定搭建个人博客增强版
概述 前面我们用github pages + Hexo 搭建了一个简单版的个人博客系统,但是里面的内容单调,很多功能不够完善,所以我们需要对yelle 的主题进行优化和完善。基本搭建请访问:http://blog.csdn.net/xiangzhihong8/article/details/53355036 主题配置介绍 从中我们也可以看出,对于主题来讲,大部分可以配置的地方其实都是在这里的。所以我们需要了解一个基本的主题样式。 duoshuo,如果你是打算采用多说评论系统的话,你需要设置这里,但是我个人对
xiangzhihong
2018/02/05
1.5K0
github pages + Hexo + 域名绑定搭建个人博客增强版
Hexo博客主题优化
在 themes/*/source/css/_custom/custom.styl 中添加如下代码:
达达前端
2019/07/03
8610
Hexo博客主题优化
Hexo+Github配置与主题
每个主题都会配置几种界面显示语言,修改语言只要编辑站点配置文件,找到 language 字段,并将其值更改为你所需要的语言(例如,简体中文):
smartsi
2019/08/07
1.2K0
Hexo-完全免费全平台搭建个人博客(2)-域名主题设置
2017-03-1011:01:58 发表评论 913℃热度 Hexo-完全免费全平台搭建个人博客(1)-整体搭建 上一篇文章把 Hexo 博客整体搭建一遍了,能通过  xxxxx.github.io
timhbw
2018/05/03
1.5K0
Hexo-完全免费全平台搭建个人博客(2)-域名主题设置
从Hexo迁移到Hugo-送漂亮的Hugo Theme主题
自从Hugo出来后,作为Go语言(golang)的重度用户的重度用户,一直想把自己的博客迁移到Hugo,但是一直没有行动,主要原因在于,我的博客使用的一款主题maupassant非常简洁、响应速度快,但是在Hugo上并没有类似一的主题,再加上从Hexo迁移到Hugo还有好多要修改的,所以一直迟迟没有行动。
飞雪无情
2018/08/28
2.2K0
个人博客搭建
  前前后后大概花了一周多的时间,目前个人博客已经完善的差不多了,现在写个文章做个阶段总结,后续如果有更新的地方,会及时补充。本博客基于Hexo框架,采用hexo-theme-matery主题,在这里非常感谢作者洪卫的hexo-blog-fly博客开源,极大简化了构建博客的工作量和复杂度。在此开源博客的基础上做了改进,修复了一些bug,顺利搭建完成了我的个人博客。大家对此主题有兴趣的可以下载源代码,搭建属于自己的个性化博客。
LuckySec
2022/11/02
2.5K0
个人博客搭建
Hexo(3)-安装自己喜欢的主题
本系列其它文章: 用 GitHub + Hexo 建立你的第一个博客 [Hexo]部署博客及更新博文 欢迎在今天下面一条推送中留下你的博客地址 本篇来讲解如何安装自己喜欢的主题! 我们之前使用 Hexo 生成的博客使用的是 Hexo 的默认主题:Landscape。怎么说呢,这个主题猛地一看还行,仔细一看还不如猛地一看,所以我决定另寻归宿。 选择主题 可以在 hexo主题总站 https://github.com/hexojs/hexo/wiki/Themes 寻找自己喜欢的主题。 我在这里推荐一个主题
Crossin先生
2018/04/17
1.1K0
Hexo(3)-安装自己喜欢的主题
Hexo博客框架初识入门到进阶.md
[TOC] 1.Hexo介绍 Q:什么是 Hexo? A:Hexo 是一个快速、简洁且高效的博客框架,Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网
全栈工程师修炼指南
2020/10/23
1.5K0
Hexo博客框架初识入门到进阶.md
从零开始写一个Hexo主题
本文将会从零开始编写一个简单的Hexo博客主题,目的是了解一个Hexo博客主题的构成以及如何编写,因此,本示例中的博客页面样式不做过多描绘,样式主要参考 Hexo theme 中的 Noise 主题。
桃翁
2019/05/31
4.4K0
推荐阅读
相关推荐
Halo博客主题开发之页面变量调用示范整理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验