【keras】利用LSTM做简单的时间序列预测

2023-05-16

项目地址

首先加载时间序列数据集,数据集

import pandas as pd
data = pd.read_csv('SP500.csv')
data.head()

数据集大概是这样的,这里我们选择’Close’这一列特征进行预测。
在这里插入图片描述
将其可视化

import matplotlib.pyplot as plt
import numpy as np
data_close = np.reshape(data['Close'].values,(-1,1))
plt.plot(data_close)

可以看到数值变化较大,从0变化到2500,为了方便LSTM训练我们将其进行MinMax归一化,最后再将预测结果反归一化回来即可
在这里插入图片描述
如下,对数据进行归一化

from sklearn.preprocessing import MinMaxScaler
data_scaler = MinMaxScaler(feature_range=(0, 1))
scale_data = data_scaler.fit_transform(data_close)
plt.plot(scale_data)

归一化后并不改变数据的趋势,此时数值大小被限制在(0,1)间。
在这里插入图片描述
LSTM的输入数据格式是:[batchsize,num_steps,feature_size],num_steps即我们每次用多少个观测值去预测下一个时刻的观测值,这些观测值在时间上是连续的,feature_size表示每个观测值的特征大小,这里我们是预测一个数,因此feature_size=1。我们需要定义一个函数将数据规范成这种格式。

将数据规范成[None,num_steps,feature_size]的形式,且根据test_ratio划分训练集和测试集。

def data_format(data, num_steps=4, test_ratio=0.2):
    # split into groups of num_steps
    X = np.array([data[i: i + num_steps]
                  for i in range(len(data) - num_steps)])
    y = np.array([data[i + num_steps]
                  for i in range(len(data) - num_steps)])

    train_size = int(len(X) * (1.0 - test_ratio))
    train_X, test_X = X[:train_size], X[train_size:]
    train_y, test_y = y[:train_size], y[train_size:]
    return train_X, train_y, test_X, test_y

对归一化后的数据进行数据格式规范化

num_steps = 3
test_ratio = 0.2
train_X, train_y, test_X, test_y = data_format(scale_data, num_steps, test_ratio)
print(train_X.shape, test_X.shape)
>>>  (13487, 3, 1) (3372, 3, 1)

接下来定义LSTM网络对进行预测

输入为[batchsize,num_steps,feature_size](定义Inputs时是不需要管batchsize大小的),LSTM的神经元个数为32,即LSTM层输出是一个大小为32的向量,后接一个全连接层将32维的向量映射成一个数字,采用MSE作为误差函数。

from keras.layers import LSTM, Dense, Input
from keras import Model 

inputs = Input(shape=[num_steps, 1])
lstm = LSTM(32)(inputs)
out = Dense(1)(lstm)
model = Model(inputs, out)
model.compile(loss='mean_squared_error', optimizer='adam')
model.summary()

网络形状如下,关于LSTM的网络参数个数可以看我的另一篇博客

Layer (type)                 Output Shape              Param #   
=================================================================
input_2 (InputLayer)         (None, 3, 1)              0         
_________________________________________________________________
lstm_2 (LSTM)                (None, 32)                4352      
_________________________________________________________________
dense_2 (Dense)              (None, 1)                 33        
=================================================================
Total params: 4,385
Trainable params: 4,385
Non-trainable params: 0

接着对网络进行fit训练

model.fit(train_X, train_y, batch_size=1, epochs=30)

在这里插入图片描述
训练完成后我们对测试集进行预测

preds = model.predict(test_X)

将预测结果反归一化,并于真实值比较

preds = data_scaler.inverse_transform(preds)
trues = data_scaler.inverse_transform(test_y)
plt.plot(preds, c='r', label='predict')
plt.plot(trues, c='b', label='true')
plt.legend()

可以看到这个简单的网络已经基本拟合了测试集,表现不错,我们还可以搭建多层LSTM做更复杂的模型,搭建多层LSTM可见我的另一篇博客
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【keras】利用LSTM做简单的时间序列预测 的相关文章

  • Git在vscode中简单使用

    Git在vscode中简单使用 一 Git安装与配置 1 Git安装 xff08 官网地址 xff1a https git scm com xff09 2 Git配置 xff08 1 xff09 安装好后 xff0c 桌面右键 Git Ba
  • 小程序云开发入门

    文章目录 前言一 开通云开发二 使用云开发1 直接创建云开发项目2 修改配置文件引入云开发 三 云数据库1 介绍2 使用 四 云函数1 介绍2 使用 五 云存储1 介绍2 使用 总结 前言 一个小程序在开发时 xff0c 除了考虑界面功能逻
  • 小程序Mpx框架入门

    文章目录 简介一 Mpx的特点1 使用原因2 设计思路3 与其他框架的区别 二 安装使用1 相关命令2 项目创建演示 三 Mpx在vscode中的相关插件四 学习Mpx框架开发1 Mpx具有的功能特性2 学习的资源 总结 简介 Mpx是一款
  • 小程序云函数调用云函数

    文章目录 前言一 案例说明二 功能实现1 云函数1 xff1a getdata2 云函数2 xff1a deldata 总结 前言 小程序云开发提供了云函数 xff0c 云函数是运行在服务端的代码 xff0c 执行速度快 通常一些复杂的功能
  • Vue项目打包后不能正常显示页面

    项目场景 xff1a 通过 Vue CLI 创建的 vue 项目 xff0c 编写完项目后 xff0c 通过 npm run bulid 对项目进行打包 xff0c 再把打包得到的内容 xff08 dist文件夹 xff09 交给后端部署到
  • element-ui二次封装实现全局回到顶部组件

    文章目录 前言一 实现方法1 创建 BackTop 组件2 全局注册组件3 使用组件 二 组件效果总结 前言 在开发 vue 项目时 xff0c 我们都可能用到 element ui xff0c 但是有时 element ui 提供的组件太
  • element-ui二次封装实现普通登录组件

    文章目录 前言一 实现方法1 创建 AccountLogin 组件2 全局注册组件3 使用组件 二 组件效果总结 前言 在开发 vue 项目时 xff0c 我们都可能用到 element ui xff0c 但是有时 element ui 提
  • CFCA预置证书

    1 单一证书 2 导入数字证书流程 3 加密证书私钥结构
  • element-ui二次封装实现短信验证码登录组件

    文章目录 前言一 实现方法1 创建 PhoneLogin 组件2 全局注册组件3 使用组件 二 组件效果总结 前言 在开发 vue 项目时 xff0c 我们都可能用到 element ui xff0c 但是有时 element ui 提供的
  • C++之make、cmake和makefile的区别

    make cmake和makefile的区别 make 此工具类似于批处理工具 xff0c 可以对多个源文件进行批量地编译和链接makefile 是一个文本文件 xff0c 其中包含了make工具在执行时所要遵循的一系列规则Cmake xf
  • Ubuntu系统下搭建PX4环境

    Ubuntu系统下搭建PX4环境 首先我是从一个小白开始的 xff0c 完全不懂linux系统 xff0c 完全不懂PX4 xff0c PX4固件是Pixhawk飞行控制器的官方固件 xff0c Pixhawk官网也给出了Linux win
  • mavlink_generator生成器安装过程

    mavlink generator生成器安装过程 从官网下载mavlink xff08 git clonhttps github com mavlink mavlink git 然后进入mavlink 目录执行 git submodule
  • linux系统下QGC地面站和串口助手cutecom 安装教程

    linux系统下QGC地面站和串口助手cutecom 安装教程 解除权限 xff1a sudo usermod a G dialout USER sudo apt get remove modemmanager y sudo apt ins
  • PX4中通过串口读取STM32F4串口发送过来消息并发布UORB主题

    PX4中通过串口读取STM32F4串口发送过来消息并发布UORB主题 本次小项目是通过PX4读取STM32F4发过来的数据 xff0c 之前博客介绍了我做的STM32端项目 xff0c 再稍微啰嗦一下 xff1a 解析AIRMAR和测深仪数
  • PX4自定义mavlink消息

    PX4自定义mavlink消息 承接前面UORB发布消息 xff0c 然后现在要使用mavlink发布消息 xff0c 然后通过433MHz进行无线传输 这个阶段对我来说异常艰难 xff0c 我个人傻傻看了2天mavlink配置文件 xff
  • GraphSAGE论文总结及源码解读

    论文总结 论文地址 xff0c 源码 本文只对论文做简单的总结分析 xff0c 不详细介绍 xff0c GraphSAGE 即SAmple and aggreGatE 的主要贡献是引入了Inductive和Sample Inductive
  • 【tf】tf.random_shuffle

    张量沿着维度0 按行打乱 重新打乱 xff0c 例如 一个 3x2 张量可能出现的映射是 span class token punctuation span span class token punctuation span span cl
  • 【tf】tf.nn.dropout

    dropout是神经网络中用来防止过拟合的技巧 xff0c 在每一轮训练时随机丢弃一些神经元 tf span class token punctuation span nn span class token punctuation span
  • Windows服务程序

    Windows服务程序 Windows服务程序 liuxwin ChinaUnix博客
  • 【tf】tf.reduce_mean

    x span class token operator 61 span tf span class token punctuation span Variable span class token punctuation span span

随机推荐

  • 马氏距离(Mahalanobis Distance)推导及几何意义

    看了一些博客对马氏距离的解释 xff0c 似乎没有讲到本质的地方 xff0c 本文从欧氏距离存在的问题开始入手 xff0c 一步步推导出马氏距离 xff0c 并得出结论 xff1a 原始空间中的马氏距离等于坐标旋转变换及缩放后的空间中的欧氏
  • GCN推导

    GCN涉及到的理论比较多 xff0c 包括信号分析中的傅里叶变换 图谱等理论 xff0c 这里只做一个简单的推导 xff0c 旨在让读者了解GCN推导的大致思路以及其中用到的定理 xff0c 错误之处还请指出 大致了解GCN的思路后可移步学
  • 离散马尔科夫链的平稳分布的两种解法

    假设离散马尔科夫链的转移矩阵为 P P P xff0c 平稳分布为 pi xff0c 则平稳分布满足 xff1a
  • 协方差矩阵的几何意义

    假设原始数据为 X X X xff0c 其协方差矩阵 C C C 为对称矩阵 xff0c 协方差矩阵的特征分解为
  • DBSCAN算法原理

    DBSCAN Density Based Spatial Clustering of Applications with Noise xff0c 基于密度的噪声空间聚类 大概思想 xff1a 给定一组空间中的点 xff0c 它会将紧密挨在一
  • 【tf】tf.expand_dims()

    增加张量维度 span class token keyword import span tensorflow span class token keyword as span tf a span class token operator 6
  • 卷积与反卷积

    卷积与反卷积 xff0c 及其在tensorflow中的接口 xff0c 文章 keras中的卷积 xff0c 文章 卷积时padding选择 same 则卷积结果和输入相同 xff0c 选择 valid 则根据公式 o 61 i
  • 【tf】tf.nn.relu_layer()

    tf nn relu layer x weights biases name 61 None tf nn relu x 函数对卷积后的结果进行激活 xff0c 而tf nn relu layer对输入变量x和weights做矩阵乘法并加上b
  • 【keras】搭建简单的神经网络

    span class token keyword from span keras span class token keyword import span layers span class token keyword from span
  • 进程间数据共享

    windows核心编程之进程间共享数据 走看看 zoukankan com
  • 深度学习训练神经网络时一些名词的意思

    假设训练数据集合 T T T 包含 N N N 个样本 xff0c 将数据集划分为 B
  • 【keras】将标签转化为one-hot

    将标签转换为onehot span class token keyword from span keras span class token punctuation span utils span class token keyword i
  • 交叉熵

    参考自 xff0c 文章 在度量两个概率分布的差距时 xff0c 我们通常会使用KL 散度 xff0c 例如对于 p p p q q q 两个概率分布 xff0c 其KL 散度为
  • 深度学习分类损失函数

    损失函数softmax cross entropy binary cross entropy sigmoid cross entropy之间的区别与联系 xff0c 以及其在tensorflow中的用法 文章 softmax cross e
  • 图像分割任务中的图像增强

    对数据进行增强是一种常用的操作 xff0c 用来生成更多的数据 xff0c 提高模型的泛化能力 xff0c 对图像数据增强的常用方法有 xff1a 弹性形变 旋转 加入噪声等 在图像分割任务中 xff0c 除了需要对图像进行变换外 xff0
  • Python保存图片

    image为三维数组 xff08 RGB xff09 或一维数组 xff08 灰白 xff09 span class token keyword import span matplotlib span class token punctua
  • 【keras】多GPU训练模型及保存

    下面是一个小demo xff0c 需要注意的地方是保存模型的时候只保存单个GPU的模型 xff0c 不要保存多GPU训练的模型 xff0c 否则加载时会报错的 span class token keyword from span sklea
  • LSTM参数个数计算方法

    计算LSTM的参数个数需要了解其工作原理 xff0c 如下 xff1a 可以看到若不加偏置 xff0c 该LSTM层共有4个权重参数 xff0c 图中输入的一个timestep的特征大小为3 xff08 绿色单元 xff09 xff0c 隐
  • 【keras】搭建多层lstm层

    记住中间的lstm层需要返回所有timestep的输出作为下一层lstm的输入 xff0c 所以除了最后一层lstm外其它层的return sequences 61 True span class token keyword from sp
  • 【keras】利用LSTM做简单的时间序列预测

    项目地址 首先加载时间序列数据集 xff0c 数据集 span class token keyword import span pandas span class token keyword as span pd data span cla