首页 > 编程语言 >TensorFlow、Keras的LSTM神经网络预测和异常检验股市价格时间序列数据可视化python实例附代码数据

TensorFlow、Keras的LSTM神经网络预测和异常检验股市价格时间序列数据可视化python实例附代码数据

时间:2024-06-11 23:57:19浏览次数:20  
标签:预测 训练 Keras python 模型 train TensorFlow LSTM 数据

全文链接:https://tecdat.cn/?p=36448

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

本文旨在探讨如何利用TensorFlow和Keras中的LSTM神经网络来预测和检验股市价格时间序列数据,并通过Python编程语言和可视化技术来展示预测结果和异常检验的效果。具体而言,本文将首先介绍LSTM神经网络的基本原理和TensorFlow、Keras框架的使用方法,然后通过实例详细阐述如何构建和训练LSTM神经网络模型,以及如何进行数据预处理、特征提取和模型评估。

本文将展示如何帮助客户应用该模型进行时间序列预测和股票价格数据进行异常点检测,并通过可视化技术来直观地呈现预测结果和异常点。最后,本文将对结果进行分析和讨论,并探讨该模型在实际应用中的潜力和挑战。

LSTM神经网络的基本原理

长短时记忆网络(Long Short-Term Memory,LSTM)是一种特殊的循环神经网络,它可以学习长期依赖关系,并在时间序列数据中捕捉到更多的历史信息。传统的RNN在处理长序列数据时,存在梯度消失或梯度爆炸的问题,而LSTM通过引入内部门控制结构解决了这个问题。

LSTM的核心组件包括输入门、遗忘门和输出门。输入门决定了哪些信息需要被存储到细胞状态中;遗忘门决定了哪些信息需要从细胞状态中删除;输出门决定了细胞状态中的信息如何与其他层交互。这三个门的输出都是一个向量,表示对相应操作的程度。

时间序列预测的示例

首先,安装所需的库:

   
!pip install gdown
!pip install tensorflow-gpu

绘制正弦波数据:

image.png

对数据进行预处理:

image.png

将数据集划分为训练集和测试集:

   
train_size = int(len(df) * 0.8)

输出:

   
800 200

定义一个函数,用于创建输入数据和标签:

首先,我们需要创建一个具有时间步长的数据集。在这个例子中,我们使用了10个时间步长。

  python
time_steps = 10

# 将数据重塑为 [samples, time_steps, n_features] 的形状
X_train, y_train = create_dataset(train, train.sine, time_steps)

输出结果为:

   
(790, 10, 1) (790,)

接下来,我们构建一个模型。在这个例子中,我们使用了一个具有128个神经元的LSTM层,然后是一个具有1个神经元的全连接层。

  python
optimizer=keras.optimizers.Adam(0.001))

现在,我们开始训练模型。我们设置了30个训练周期,批量大小为16,验证集比例为0.1。

训练过程中的损失值如下图所示:

image.png

接下来,我们评估模型的性能。我们绘制了训练损失和验证损失的曲线。

评估结果如下图所示:

image.png

最后,我们预测测试集上的值。

  python
y_pred = model.predict(X_test)

我们绘制了历史数据、真实值和预测值的曲线。

7f11f44e5cdc4f1bbf52b75a73d4358b~tplv-k3u1fbpfcp-jj-mark_0_0_0_0_q75.jpg

异常检测

这是一个使用TensorFlow和Keras进行时间序列预测的示例。首先,安装所需的库:

   
!pip install gdown 
!pip install tensorflow-gpu

接下来,读取数据并设置索引:

   
df = pd.read_csv('spx.csv'

查看数据的前5行:

image.png

绘制收盘价:

   
plt.plot(df, label='close price') 
plt.legend();

image.png

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

image.png

   


scaler = StandardScaler()

以上代码使用StandardScaler对训练集和测试集的收盘价进行了标准化处理。

这是一个函数,用于将数据集划分为输入和输出,输入为最近的time_steps个值,输出为接下来的一个值。

这里,我们定义了时间步长TIME_STEPS为30,然后使用create_dataset函数将训练集和测试集划分为输入和输出。最后,我们打印出训练集的形状,以便后续使用。

image.png

首先,我们定义了一个Sequential模型,并添加了一个LSTM层,单元数为64,输入形状为(X_train.shape[1], X_train.shape[2])。接着,我们添加了一个Dropout层,丢弃率为0.2,以减少过拟合。然后,我们添加了一个RepeatVector层,重复次数为X_train.shape[1]。再次,我们添加了一个LSTM层,单元数为64,返回序列为True。最后,我们添加了一个TimeDistributed层,其中的Dense层单元数为X_train.shape[2]。模型编译时,我们选择了均方误差作为损失函数,优化器为Adam。

   

model.compile(loss='mae', optimizer='adam')

接下来,我们使用model.fit()函数对模型进行训练。训练数据为X_train和y_train,训练轮数为10,批量大小为32,验证集比例为0.1,不打乱数据顺序。训练完成后,我们绘制了训练损失和验证损失随迭代次数的变化曲线,如图1所示。从图中可以看出,训练损失和验证损失都逐渐降低,说明模型在训练过程中逐渐收敛。

image.png

image.png

然后,我们使用模型预测训练数据,得到预测结果X_train_pred。计算预测结果与真实值之间的平均绝对误差,得到train_mae_loss。最后,我们使用seaborn库绘制了train_mae_loss的分布图,如图2所示。从图中可以看出,大部分样本的MAE损失集中在较小的范围内,说明模型在训练数据上的预测效果较好。

   
sns.distplot(train_mae_loss, bins=50, kde=True);

image.png

首先,我们需要将测试数据集的MAE损失值、阈值和收盘价等信息整合到一个DataFrame中,以便后续分析。这里的阈值为0.65。

接下来,我们绘制了损失值与时间的关系图,以及阈值与时间的关系图。

image.png

从图中可以看出,损失值在大部分时间内都低于阈值,说明模型的预测效果较好。

然后,我们筛选出了所有异常点(即损失值大于阈值的点)。

   

anomalie.head()

image.png

最后,我们将原始收盘价与异常点绘制在同一张图上,以便观察异常点在股价走势中的位置。

   

plt.xticks(rotation=25)
plt.legend();

6dd85f66d0f64c5e9292bedfae12162c~tplv-k3u1fbpfcp-jj-mark_0_0_0_0_q75.jpg 从图中可以看出,异常点主要分布在股价波动较大的区域,这说明模型在预测股价波动较大的情况下可能存在一定的偏差。

QQ截图20220302134203.png

标签:预测,训练,Keras,python,模型,train,TensorFlow,LSTM,数据
From: https://www.cnblogs.com/tecdat/p/18243035

相关文章

  • python pywinauto自动化实战案例:输入账号密码及点击登录按钮
    代码示例在使用pywinauto来模拟输入账号密码及点击登录按钮时,你需要先定位到相应的输入框和按钮,然后执行相应的操作。以下是一个基本的示例代码,展示如何实现这一过程:frompywinautoimportApplicationimporttime#假设你的应用已经启动,如果是启动应用的话,使用.start(......
  • 酷游网址:如何在Linux 上安装Python、pip 和EB CLI
    由酷游网址вт989点сс编译,要如何在Linux上安装Python、pip和EBCLI呢?EBCLI需要Python2.7、3.4或更新版本。如果您的发行版本没有随附Python,或者随附了旧版本,请在安装pip和EBCLI之前先安装Python。在Linux上安装Python3.7判断是否已安装Python。$python--ve......
  • 在Python中使用GPU进行并行计算的方法
    在Python中使用GPU进行计算通常涉及到一些特定的库,如NumPy、SciPy的GPU加速版本(如CuPy、PyCUDA等)或深度学习库(如TensorFlow、PyTorch等)。这些库能够利用GPU进行并行计算,从而加速数据处理和模型训练等任务。以下是一个使用TensorFlow和PyTorch在Python中利用GPU进行计算的详细......
  • 使用Python爬取京东商品图片的代码实现
    在数据驱动的商业环境中,网络爬虫技术已成为获取信息的重要手段。京东作为中国领先的电商平台,拥有海量的商品信息和图片资源。本文将详细介绍如何使用Python编写爬虫程序,爬取京东商品的图片,并提供完整的代码实现过程。爬虫基础在开始编写爬虫之前,需要了解一些基本的网络爬虫概......
  • python安装库失败问题解决
    相信很多小伙伴在安装python软件包时候会遇到各种各样的报错吧,为此针对这些问题我进行了汇总并解决。 此时,使用cmd,pipinstall--相应包名称  这里需要升级一下pip,python.exe-mpipinstall--upgradepip然后按照操作一步步就可以解决咯。 ......
  • 用Tensorflow API:tf.keras搭建网络八股:六步法
    #想要搭建属于自己的神经网络模型么,跟我做六步就好#入门课程可看Tensorflow2.0#激活函数教程#课程很好如有不懂可私信交流总览六步法的简要内容import      第一步引入相关模块train,test    第二步说明训练集(特征)和测试集(标签)是什么model=tf.k......
  • python栈帧沙箱逃逸
    python栈帧沙箱逃逸一、生成器生成器(Generator)是Python中一种特殊的迭代器,它可以通过简单的函数和表达式来创建。生成器的主要特点是能够逐个产生值,并且在每次生成值后保留当前的状态,以便下次调用时可以继续生成值。这使得生成器非常适合处理大型数据集或需要延迟计算的情况。......
  • Python中的协程
    1.引言在现代软件开发中,处理高并发任务已成为常态。Python,作为一种广泛使用的高级编程语言,提供了强大的并发模型,其中协程是关键组件。本文将深入探讨Python中的协程,从基础概念到高级应用,以及它们在实际开发中的使用。2.协程的基本概念在深入探讨Python协程之前,我们需要......
  • 【办公自动化】Python中的BeautifulSoup
    Python中的BeautifulSoup简介BeautifulSoup是一个Python库,用于解析HTML和XML文档。它可以将复杂的HTML文档转换为树形结构,使得我们可以轻松地提取所需的信息。BeautifulSoup支持多种解析器,如html.parser、lxml和html5lib等。本文将介绍BeautifulSoup的基本用法和一些常用功能。......
  • 学会python——文本分词(python实例一)
    目录1、认识Python2、环境与工具2.1python环境2.2pycharm编译3、对文本进行分词3.1代码构思3.2代码示例3.3运行结果4、总结1、认识PythonPython是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python的设计具有很强的可读性,相比其他......