博客
关于我
【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进阶-查询优化-慢查询日志
查看>>
wargame narnia writeup
查看>>
MySQL进阶篇SQL优化(InnoDB锁问题排查与解决)
查看>>
Mysql进阶索引篇03——2个新特性,11+7条设计原则教你创建索引
查看>>
mysql远程连接设置
查看>>
MySql连接出现1251Client does not support authentication protocol requested by server解决方法
查看>>
Mysql连接时报时区错误
查看>>
MySql连接时提示:unknown Mysql server host
查看>>
MySQL连环炮,你扛得住嘛?
查看>>
mysql逗号分隔的字符串如何搜索
查看>>
MySQL通用优化手册
查看>>
Mysql通过data文件恢复
查看>>
MYSQL遇到Deadlock found when trying to get lock,解决方案
查看>>
MYSQL遇到Deadlock found when trying to get lock,解决方案
查看>>
mysql部署错误
查看>>
MySQL配置信息解读(my.cnf)
查看>>
Mysql配置文件my.ini详解
查看>>
MySQL配置文件深度解析:10个关键参数及优化技巧---强烈要求的福利来咯。
查看>>
Mysql配置表名忽略大小写(SpringBoot连接表时提示不存在,实际是存在的)
查看>>
mysql配置读写分离并在若依框架使用读写分离
查看>>