博客
关于我
【keras】利用LSTM做简单的时间序列预测
阅读量:363 次
发布时间:2019-03-04

本文共 2234 字,大约阅读时间需要 7 分钟。

使用LSTM模型进行股票价格预测

在金融领域,时间序列预测一直是研究热点之一,而LSTM(长短期记忆网络)作为一种强大的序列建模方法,近年来在股票价格预测中取得了显著成果。本文将介绍一个简单的LSTM模型,用于基于历史数据进行股票价格预测。

1. 数据准备与预处理

首先,我们需要加载时间序列数据集。以下是加载数据的代码示例:

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

数据集包含股票价格的历史数据,选择Close列作为目标特征进行预测。为了便于模型训练,我们对数据进行归一化处理。

import numpy as npfrom sklearn.preprocessing import MinMaxScalerdata_close = np.reshape(data['Close'].values, (-1, 1))scaler = MinMaxScaler(feature_range=(0, 1))scaled_data = scaler.fit_transform(data_close)

归一化后的数据范围被限制在[0, 1]之间,这有助于加速模型收敛。

2. 数据格式规范化

LSTM的输入格式要求为 [batch_size, num_steps, feature_size],其中num_steps表示每次预测使用的历史观测数,feature_size为每个观测的特征维度。在本例中,feature_size设为1,因为我们只预测一个未知数。

def data_format(data, num_steps=4, test_ratio=0.2):    # 将数据分割为多个时间窗口    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 - 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 = 3test_ratio = 0.2train_X, train_y, test_X, test_y = data_format(scaled_data, num_steps, test_ratio)print(train_X.shape, test_X.shape)  # 输出 tensor shape

3. 构建LSTM模型

接下来,我们定义LSTM网络结构。输入数据为 [batch_size, num_steps, 1],LSTM层输出为32维向量,后接一个全连接层将其映射为预测结果。

from keras.layers import LSTM, Dense, Inputfrom keras import Modelinput_tensor = Input(shape=[num_steps, 1])lstm_layer = LSTM(32)(input_tensor)output_layer = Dense(1)(lstm_layer)model = Model(inputs=input_tensor, outputs=output_layer)model.compile(loss='mean_squared_error', optimizer='adam')model.summary()

模型总参数数量为4385,训练参数数量同样为4385。

4. 模型训练

训练模型使用以下代码:

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

训练完成后,我们对测试集进行预测。

5. 预测与结果分析

preds = model.predict(test_X)# 反归一化预测结果scaled_pred = scaler.inverse_transform(preds)# 反归一化真实值true_values = scaler.inverse_transform(test_y)plt.plot(preds, c='r', label='预测值')plt.plot(true_values, c='b', label='真实值')plt.legend()plt.show()

从预测结果可以看出,模型对测试集的预测具有较高的拟合度。虽然模型表现优异,但可以进一步优化模型结构,例如增加LSTM层数以提升预测精度。

6. 展望

本文介绍了一个简单的LSTM模型用于股票价格预测。通过对数据进行归一化和格式规范化,成功训练出一个基本性能的预测模型。对于更复杂的场景,可以考虑增加LSTM层数,或引入注意力机制,以提升模型性能。

转载地址:http://znkg.baihongyu.com/

你可能感兴趣的文章
mysql 往字段后面加字符串
查看>>
mysql 快照读 幻读_innodb当前读 与 快照读 and rr级别是否真正避免了幻读
查看>>
MySQL 快速创建千万级测试数据
查看>>
mysql 快速自增假数据, 新增假数据,mysql自增假数据
查看>>
MySql 手动执行主从备份
查看>>
Mysql 批量修改四种方式效率对比(一)
查看>>
mysql 批量插入
查看>>
Mysql 报错 Field 'id' doesn't have a default value
查看>>
MySQL 报错:Duplicate entry 'xxx' for key 'UNIQ_XXXX'
查看>>
Mysql 拼接多个字段作为查询条件查询方法
查看>>
mysql 排序id_mysql如何按特定id排序
查看>>
Mysql 提示:Communication link failure
查看>>
mysql 插入是否成功_PDO mysql:如何知道插入是否成功
查看>>
Mysql 数据库InnoDB存储引擎中主要组件的刷新清理条件:脏页、RedoLog重做日志、Insert Buffer或ChangeBuffer、Undo Log
查看>>
mysql 数据库中 count(*),count(1),count(列名)区别和效率问题
查看>>
mysql 数据库备份及ibdata1的瘦身
查看>>
MySQL 数据库备份种类以及常用备份工具汇总
查看>>
mysql 数据库存储引擎怎么选择?快来看看性能测试吧
查看>>
MySQL 数据库操作指南:学习如何使用 Python 进行增删改查操作
查看>>
MySQL 数据库的高可用性分析
查看>>