基于Keras用LSTM进行时间序列预测(一)

教你搭建多变量时间序列预测模型LSTM(附代码、数据集) 长短期记忆循环神经网络等几乎可以完美地模拟多个输入变量的问题,这为时间序列预测带来极大益处。本文介绍了如何在 Keras 深度学习库中搭建用于多变量时间序列预测的 LSTM 模型。 诸如长短期记忆(LSTM)循环神经网络的神经神经网络几乎可以无缝建模具备多个输入变量的问题。 这为时间序列预测带来极大益处,因为经典线性方法难以适应多变量或多输入预测问题... 阅读详情

如何基于Keras和Tensorflow用LSTM进行时间序列预测

李倩 发表于 2018-09-06 08:53:16

论智

+关注

编者按:本文将介绍如何基于Keras和Tensorflow,用LSTM进行时间序列预测。文章数据来自股票市场数据集,目标是提供股票价格的动量指标。

GitHub:github.com/jaungiers/LSTM-Neural-Network-for-Time-Series-Prediction

什么是LSTM?

自提出后,传统神经网络架构一直没法解决一些基础问题,比如解释依赖于信息和上下文的输入序列。这些信息可以是句子中的某些单词,我们能用它们预测下一个单词是什么;也可以是序列的时间信息,我们能基于时间元素分析句子的上下文。

简而言之,传统神经网络每次只会采用独立的数据向量,它没有一个类似“记忆”的概念,用来处理和“记忆”有关各种任务。

为了解决这个问题,早期提出的一种方法是在网络中添加循环,得到输出值后,它的输入信息会通过循环被“继承”到输出中,这是它最后看到的输入上下文。这些网络被称为递归神经网络(RNN)。虽然RNN在一定程度上解决了上述问题,但它们还是存在相当大的缺陷,比如在处理长期依赖性问题时容易出现梯度消失。

这里我们不深入探讨RNN的缺陷,我们只需知道,既然RNN这么容易梯度消失,那么它就不适合大多数现实问题。在这个基础上,Hochreiter&Schmidhuber于1997年提出了长期短期记忆网络(LSTM),这是一种特殊的RNN,它能使神经元在其管道中保持上下文记忆,同时又解决了梯度消失问题。具体工作原理可读《一文详解LSTM网络》。

上图是LSTM的一个典型内部示意图,它由若干节点和若干操作组成。其中,操作充当输入门、输出门和遗忘门,为节点状态提供信息。而节点状态负责在网络中记录长期记忆和上下文。

一个简单的正弦曲线示例

为了演示LSTM在预测时间序列中的作用,我们先从最基础的开始:一个时间序列——标准正弦曲线。

代码数据文件夹中提供的数据包含我们创建的sinewave.csv文件,该文件包含5001个正弦曲线时间段,幅度和频率为1(角频率为6.28),时间差为0.01。它的图像如下所示:

正弦曲线数据集

有了数据,接下来就是实现目标。在这个任务中,我们希望LSTM能根据提供的数据学习正弦曲线,并预测此后的N步,持续输出曲线。

为了做到这一点,我们需要先对CSV文件中的数据进行转换,把处理后的数据加载到pandas的数据框架中。之后,它会输出numpy数组,馈送进LSTM。Keras的LSTM一般输入(N, W, F)三维numpy数组,其中N表示训练数据中的序列数,W表示序列长度,F表示每个序列的特征数。

在这个例子中,我们使用的序列长度是50(读取窗口大小),这意味着网络能在每个序列中都观察到完整的正弦曲线形状,便于学习。

序列本身是滑动窗口,因此如果我们每次只移动1,所得图像其实和先前的图像是完全一样的。下面是我们在示例中截取的窗口图像:

为了加载这些数据,我们在代码中创建了一个DataLoader类。你可能会注意到,在初始化DataLoader对象时,会传入文件名、传入确定用于训练与测试的数据百分比的拆分变量,以及允许选择一列或多列数据的列变量用于单维或多维分析。

当我们有一个允许加载数据的数据对象之后,就是时候准备构建深层神经网络模型了。我们的代码框架利用模型类型和config.json文件,再加上存储在配置文件中的架构和超参数,可以轻松构建出模型。其中执行构建命令的主要函数是build_model(),它负责接收解析的配置文件。

这个函数的代码如下所示,它可以轻松扩展,以便用于更复杂的架构。

加载数据并建立模型后,现在我们可以用训练数据训练模型。如下代码所示,我们创建了一个单独的运行模块,它会利用我们的模型和DataLoader一起训练,输出预测结果和可视化。

对于输出,我们会进行两种类型的预测:一是逐点预测,即先让模型预测单个点的值,在图中绘出位置,然后移动滑动窗口,用完整的测试数据预测下个点的值。二是预测一个完整序列,即只用训练数据的第一部分初始化一次训练窗口,然后就像逐点预测一样,不断移动滑动窗口并预测下一个点。

和第一种做法不同的是,第二种做法是在用预测所得的数据进行预测,即在第二次预测时,模型所用数据中有一个数据点(最后一个点)来自之前的预测;第三次预测时,数据中就有两个点来自之前的预测……以此类推,到第50次预测时,测试集里的数据已经完全是预测的数据。这意味着模型可预测的时间序列被大大延长。

逐点预测结果

完整序列预测结果

作为参考,你可以在下面的配置文件中看到用于正弦曲线示例的网络架构和超参数。

我们可以从上面两幅图中发现,如果用第二种方法进行预测,随着测试集中被不断加入新的预测数据点,模型的性能会渐渐下降,预测结果和真实结果的误差越来越大。但正弦函数是一个非常简单的零噪声震荡函数,总体来看,我们的模型在没有过拟合的同时还是能很好的模型曲线大致情况的。

接下来,就让我们在股票数据上试试LSTM。

没那么简单的股票市场

很多股民都做过这样一个梦:如果我能准确预测大盘走向,那一夜暴富岂不是手到擒来?但一觉醒来,现实是残酷的,预测这件事并不像数字模拟那么简单。

和正弦曲线不同,股票市场的时间序列并不是某个特定静态函数的映射,它最明显的属性是随机性。真正的随机是不可预测的,也没有预测的价值,但是,很多人相信股票市场不是一个纯粹的随机市场,它的时间序列可能存在某种隐藏模式。而根据上文的介绍,LSTM无疑是捕捉这种长期依赖关系的一个好方法。

下文使用的数据是Github数据文件夹中的sp500.csv文件。此文件包含2000年1月至2018年9月的标准普尔500股票指数的开盘价、最高价、最低价、收盘价以及每日交易量。

在第一个例子中,正弦曲线的取值范围是-1到1,这和股票市场不同,收盘价是个不断变化的绝对价格,这意味着如果我们不做归一化处理就直接训练模型,它永远不会收敛。

为了解决这个问题,我们设训练/测试的滑动窗口大小为n,对每个窗口进行归一化,以反映从该窗口开始的百分比变化。

n = 价格变化的归一化列表[滑动窗口]

p = 调整后每日利润的原始列表[滑动窗口]

归一化:ni = pi/p0 - 1

反归一化:pi = p0( ni + 1)

处理完数据后,我们就可以和之前一样运行模型。但是,我们做了一个重要的修改:不使用model.train() ,而是用model.traingenerator()。这样做是为了在处理大型数据集时节约内存,前者会把完整数据集全部加载到内存中,然后一个窗口一个窗口归一化,容易内存溢出。此外,我们还调用了Keras的fitgenerator()函数,用python生成器动态训练数据集来绘制数据,进一步降低内存负担。

在之前的例子中,逐点预测的结果比完整序列预测更精确,但这有点欺骗性。在这种情况下,除了预测点和最后一次预测的数据点之间的距离,神经网络其实不需要了解时间序列本身,因为即便它这次预测错误了,在进行下一次预测时,它也只会考虑真实结果,完全无视自己的错误,然后继续产生错误预测。

虽然这听起来不太妙,但其实这种方法还是有用的,它至少能反映下一个点的范围,可用于波动率预测等应用。

逐点预测结果

接着是完整序列预测,在正弦曲线那个例子中,这种方法的偏差虽然越来越大,但它还是保留了整体波动形状。如下图所示,在复杂的股票价格预测中,它连这个优势都没了,除了刚开始橙线略有波动,它预测的整体趋势是一条水平线。

完整序列预测结果

最后,我们对该模型进行了第三种预测,我将其称为多序列预测。这是完整序列预测的混合产物,因为它仍然使用测试数据初始化测试窗口,预测下一个点,然后用下一个点创建一个新窗口。但是,一旦输入窗口完全由过去预测点组成,它就会停止,向前移动一个完整的窗口长度,用真实的测试数据重置窗口,然后再次启动该过程。

实质上,这为测试数据提供了多个趋势线预测,以便我们评估模型对未知数据的预测性能。

多序列预测结果

如上图所示,神经网络似乎正确地预测了绝大多数时间序列的趋势(和趋势幅度),虽然不完美,但它确实表明LSTM在时间序列问题中确实有用武之地。

结论

虽然本文给出了LSTM应用的一个示例,但它只触及时间序列预测问题的表面。现如今,LSTM已成功应用于众多现实问题,从文本自动纠正、异常检测、欺诈检测到自动驾驶汽车技术开发。

它还存在一些局限性,特别是在金融时间序列任务上,通常这类任务很难建模。此外,一些基于注意力机制的神经网络也开始在其他任务上表现出超越LSTM的性能。

但截至目前,LSTM相比传统神经网络还是进步明显,它能够非线性地建模关系并以非线性方式处理具有多个维度的数据,这是几十年前的人们梦寐以求的。

 

文章来源:http://m.elecfans.com/article/770833.html

Keras LSTM实现多维输入输出时序预测实践详解 自古以来,我们就希望预知未来,现如今,随着大数据人工智能技术的发展,我们早已经不满足传统的同比、环比等数据分析方法,但是时间序列趋势预测的传统算法又很专业,很难用于日常生产经营中。 深度学习神经网络为我们提供较为通用的解决方案,我们将在这里实践基于Python Keras LSTM多维输入输出时序预测模型。 阅读详情

相关推荐

数据挖掘实战-python实现基于长短期记忆网络LSTM模型预测茅台股票价格趋势

随着金融数据的不断增长和复杂化,传统的统计方法和机器学习技术面临着挑战。深度学习算法通过多层神经网络的构建,以及大规模数据的训练和优化,可以从数据中提取更加丰富、高级的特征表示,从而提供更准确、更稳定的预测和决策能力。在金融领域,深度学习算法已经被广泛应用于多个关键任务。首先,风险评估是金融机构必须面对的重要问题之一。深度学习算法可以通过学习大规模的历史数据,识别隐藏在数据中的潜在风险因素,并预测未来的风险情况。其次,欺诈检测是金融行业必不可少的任务。

m0_64336780的博客 1万+

时间序列预测模型实战案例(三)(LSTM)(Python)(深度学习)时间序列预测(包括运行代码以及代码讲解)

LSTM(Long Short-Term Memory)是一种常用的循环神经网络(RNN)模型,用于处理序列数据,具有记忆长短期的能力。在时间序列预测中,LSTM既可以多元预测机制又可以作为单元预测机制使用。LSTM的预测效果图其中MAE误差为0.15,ME误差为-0.03。,LSTM作为多元预测机制和单元预测机制的优点是可以处理序列数据中的长期依赖关系,从而可以捕捉到数据中的复杂模式和规律。它可以自适应地学习和调整模型参数,从而提高模型的预测性能和泛化能力。

Snu77的博客 9万+

keras 搭建lstm+dnn网络 多步时间序列预测 模板

keras 搭建lstm+dnn网络 多步时间序列预测 模板

1636

基于 Keras 用 LSTM 网络做时间序列预测

转载自:https://www.cnblogs.com/xuruilong100/p/8451790.html 作者:徐瑞龙,量化分析师 R语言中文社区专栏作者 博客专栏:https://www.cnblogs.com/xuruilong100 目录基于 Keras 用 LSTM 网络做时间序列预测问题描述长短记忆网络LSTM 网络回归LSTM 网络回归结合窗口法基于时间步的 LSTM 网络回归在批量训练之间保持 LSTM 的记忆在批量训练中堆叠 LSTM 网络总结扩展阅读 时间序列预测是一类比

积一时之步,臻千里之遥程 2038

电脑的kernelbase.dll故障怎么处理?kernelbase.dll是什么文件

kernelbase.dll​是一个系统文件,属于Microsoft Windows操作系统的一部分。该DLL(动态链接库)文件包含了许多基本且低级的系统函数,这些函数被Windows上运行的各种程序和进程调用。kernelbase.dll通常与Kernel32.dll紧密相关,它是实现许多Windows API(应用程序编程接口)的封装。这些API涉及到内存管理、输入输出操作、进程和线程管理以及其他许多核心的操作系统功能。

电脑修复君的博客 4533

告别PXE!用iPXE在CentOS 8.5上搭建一个能同时装Win11和Linux的万能网络启动盘

本文详细介绍了如何在CentOS 8.5上使用iPXE搭建支持Windows 11和Linux双系统部署的全能网络启动盘。通过对比传统PXE的局限性,展示了iPXE在HTTP协议支持、多架构适配和智能脚本方面的优势,提供从环境准备、服务配置到智能菜单开发的完整解决方案,显著提升系统部署效率。

weixin_29278805的博客 265

LSTM模型预测时间序列(快速上手)

写在前面 LSTM模型的一个常见用途是对长时间序列数据进行学习预测,例如得到了某商品前一年的日销量数据,我们可以用LSTM模型来预测未来一段时间内该商品的销量。但对于不熟悉神经网络或者对没有了解过RNN模型的人来说,想要看懂LSTM模型的原理是非常困难的,但有些时候我们不得不快速上手搭建一个LSTM模型来完成预测任务。下面我将对一个真实的时间序列数据集进行LSTM模型的搭建,不加入很多复杂的功能,快速的完成数据预测功能。 问题大概如下:某煤矿有一个监测井,我们每20分钟获...

Q_M_X_D_D_的博客 18万+

FFmpeg音频转AAC/M4A终极指南:从基础到高级参数调优

本文详细介绍了使用FFmpeg将音频转换为AAC/M4A格式的完整指南,从基础安装到高级参数调优。涵盖FDK-AAC编码器的使用、VBR/CBR模式选择、音质控制技巧以及实战案例,帮助用户在不同场景下实现高质量的音频转换。特别适合需要优化音频文件大小与音质平衡的开发者和音频处理专业人士。

rust6ferris的博客 725

时间序列预测股票数据—以LSTM模型为例

时间序列是按照一定时间间隔排列的数据,时间间隔可以是任意时间单位,通过对时间序列的分析,我们可以探寻到其中的现象以及变化规律,并将这些信息用于预测。这就需要一系列的模型,用于将原始时间序列数据放进模型中进行训练,并用训练好的时间序列模型来预测未知的时间序列。提供的数据:“中国平安”2016-2018年股票数据,背景为平安保险集团。

m0_52051577的博客 1万+

告别瞎猜!用通达信/同花顺这些资金流向函数,一眼看穿主力动向(附实战公式)

本文详细解析了通达信/同花顺资金流向函数的实战应用,帮助投资者精准识别主力动向。通过12个核心资金函数的组合逻辑,构建主力行为监控体系,避免未来函数陷阱,识别主力对倒行为,并提前捕捉异动。适合股票投资者提升自选股分析能力。

weixin_42522964的博客 1199

Win10系统蓝屏错误BAD SYSTEM CONFIG INFO的解决方案

BAD SYSTEM CONFIG INFO错误是Win10系统中较为常见的一种蓝屏错误,通常与系统配置文件损坏或丢失有关。本文介绍了三种有效的解决方法:使用系统修复高级选项修复、通过PE修复文件和重装新系统。用户可以根据实际情况选择合适的方法进行操作。同时,建议用户定期备份系统重要文件和数据,以防止类似问题的发生。在遇到问题时,保持冷静并耐心操作,通常可以顺利解决问题。

mmoo_python的博客 7723

基于LSTM模型的股票预测(keras实现)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、数据源获取二、数据预处理三、训练数据和测试数据处理总结 前言 这大概就是我第一次写博客hhh,大学摆烂好久,再摆毕不了业了。 嚣张一点,反正也没人看 一、数据源获取 数据获取是用tushare来获取的,不得不说tushare是一个简洁且方便的平台,获得的数据直接就是DataFrame格式,真是非常的nice啊。 下边贴个栗子: import tushare as ts import pandas as pd ts.s.

arke0826的博客 4448

常学常新:《Attention Is All You Need》万字解读!

常学常新:《Attention Is All You Need》万字解读!

hunteritself的博客 3648

深度学习之LSTM时间序列预测

LSTM(long short-term memory,LSTM):长短时记忆网络,是循环神经网络(recurrent neural network,RNN)的一个重要结构,循环神经的主要用途是处理和预测序列数据。全连接神经网络(感知机,BP神经网络,RBF 神经网络等)或卷积神经网络模型中,网络结构都是从输入层到隐含层再到输出层,层与层之间是全连接或部分连接,每层节点之间是无连接的。然而循环神经...

Melo琦 2万+

【数据集8】全球人口数据WorldPop详解

全球人口数据WorldPop详解

WW、forever的博客 7879

『Apisix进阶(九)』基于Upstream实现服务转发的最佳实践

本篇文章将以服务转发为核心,带你从原理到实战,深入了解 Upstream 的配置方法与常用场景。

老陈聊架构 1513

Python:利用LSTM预测时间序列数据

前言: 如果没有深入了解LSTM原理及结构,推荐看下面两篇blog,不在赘述: 从深度学习到LSTM:https://blog.youkuaiyun.com/hz371071798/article/details/82532183 LSTM结构详解:https://blog.youkuaiyun.com/zhangbaoanhadoop/article/details/81952284 正文开始,简单写一下...

cxg1105553864的博客 4872

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

使用Keras搭建LSTM模型进行多变量时间序列预测(一)

使用UCI空气质量数据集为例,原始数据下载地址 使用前一小时数据预测后1小时(Timestep=1) 参考:https://blog.youkuaiyun.com/tMb8Z9Vdm66wH68VX1/article/details/78463811 特征列表: Column Name Meaning Column Name Meaning NO 行号 TEMP 温度 year 年份 PR...

xyhlfwyhzy的专栏 2499

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

基于python的时间序列案例-Python中利用LSTM模型进行时间序列预测分析

时间序列模型时间序列预测分析就是利用过去一段时间内某事件时间的特征来预测未来一段时间内该事件的特征。这是一类相对比较复杂的预测建模问题,和回归分析模型的预测不同,时间序列模型是依赖于事件发生的先后顺序的,同样大小的值改变顺序后输入模型产生的结果是不同的。举个栗子:根据过去两年某股票的每天的股价数据推测之后一周的股价变化;根据过去2年某店铺每周想消费人数预测下周来店消费的人数等等RNN 和 LSTM...

weixin_37988176的博客 2240

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Python实战:基于LSTM的时间序列预测模型构建与优化

本文详细介绍了如何使用Python构建和优化基于LSTM的时间序列预测模型。从LSTM的原理优势讲起,逐步拆解数据预处理、模型搭建、训练优化及结果评估的全流程,并提供了实用的代码示例和避坑指南,帮助开发者高效解决销量、股价等实际预测问题。

food6的博客 500

零基础入门LSTM:从理论到简单实现

LSTM(Long Short-Term Memory)是一种特殊的循环神经网络(RNN),专门设计用来解决普通RNN在处理长序列数据时容易出现的梯度消失或梯度爆炸问题。它通过引入“门”机制(输入门、遗忘门、输出门)来控制信息的流动,从而能够更好地捕捉长期依赖关系。遗忘门:决定哪些信息从细胞状态中被丢弃。输入门:决定哪些新信息被添加到细胞状态中。输出门:决定基于当前细胞状态的输出。LSTM的这些特性使其在时间序列预测、自然语言处理等领域表现优异。

JetRaven12的博客 346

在Keras中使用LSTM模型进行多变量时间序列预测

今天我给大家介绍一个国外深度学习大牛Jason Brownlee写的一篇关于多变量时间序列预测的博客,我在原文的代码基础上做了一点点修改,只是为了便于大家更好的理解。在本文中,您将了解如何在Keras深度学习库中为多变量时间序列预测开发LSTM模型。读完成本文后,您将了解: 如何将原始数据集转换为可用于时间序列预测的数据。 如何准备数据并使LSTM适合多变量时间序列预测问题。 如何进行预测并...

weixin_42608414的博客 1万+

【keras】利用LSTM进行单变量时间序列预测和多变量时间序列预测

        对于较为简单的时间序列预测问题,可以使用Exponential Smoothing和ARIMA等传统模型非常方便地求解。然而,对于复杂的时间序列预测问题,LSTM不失为一种很好的选择。因此,本文旨在探讨如何利用LSTM神经网络求解时间序列预测问题。首先,需要明白时间序列预测问题是如何转换为传统的监督学习问题的,即时间窗方法。有关时间序列预测问题转换为监督学习的过程请移步:Time ...

XYZ 3万+

基于Keras的LSTM多变量时间序列预测

长短期记忆循环神经网络等几乎可以完美地模拟多个输入变量的问题,这为时间序列预测带来极大益处。本文介绍了如何在 Keras 深度学习库中搭建用于多变量时间序列预测的 LSTM 模型。 诸如长短期记忆(LSTM)循环神经网络的神经神经网络几乎可以无缝建模具备多个输入变量的问题。 这为时间序列预测带来极大益处,因为经典线性方法难以适应多变量或多输入预测问题。 通过本教程,你

机器之心 1万+

基于Keras的LSTM多变量时间序列股票预测

朋友多次劝我,用大数据人工智能研究下金融股票,由于本人水平有限,一直没有去想。最近两天,突然想到LSTM是不是很适合做股票预测,本文使用基于Keras框架LSTM多变量时间序列股票预测。

肖永威的专栏 1万+
上一篇: Keras中的LSTM
下一篇: 基于Keras用LSTM进行时间序列预测(二)
Poo_Chai
博客等级 码龄9年 178粉丝 117原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值