手把手教你:基于LSTM的股票预测系统

本文详细指导如何使用Python和TensorFlow搭建LSTM模型进行股票价格预测,涉及数据预处理、模型构建、训练过程以及化工商品示例。适合希望快速上手实践时间序列预测的读者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系列文章




一、项目简介

本文主要介绍如何使用python搭建:一个基于长短期记忆网络(LSTM:Long Short-Term Memory, 简称 LSTM)的股票、大宗商品预测系统

项目只是用股票预测作为抛砖引玉,其中包含了使用LSTM进行时序预测的相关代码。主要功能如下:

  • 数据预处理。
  • 模型构建及训练,使用tensorflow构建LSTM网络。
  • 预测股票时序走向并进行模型评估。

如各位童鞋需要更换训练数据,完全可以根据源码将图像和标注文件更换即可直接运行。

博主也参考过网上图像分类的文章,但大多是理论大于方法。很多同学肯定对原理不需要过多了解,只需要搭建出一个预测系统即可。

本文只会告诉你如何快速搭建一个基于LSTM的股票预测系统并运行,原理的东西可以参考其他博主

也正是因为我发现网上大多的帖子只是针对原理进行介绍,功能实现的相对很少。

如果您有以上想法,那就找对地方了!


不多废话,直接进入正题!

二、数据集介绍

首先我们这次工作主要是针对,大宗商品指数的一个预测,分别为:化工、贵金属、有色。
数据集


  • 接下来是模型预测的结果,这里我用:化工商品,来观测模型预测的时序结果:
    化工收益拟合曲线

  • 可以看到其中红色曲线为化工商品的时序情况、绿色曲线为预测情况。

三、环境安装

1.环境要求

本项目开发IDE使用的是:Pycharm,大家可以直接csdn搜索安装指南非常多,这里就不再赘述。

因为本项目基于TensorFlow因此需要以下环境:

  • tensorflow >= 2.0
  • pandas
  • scikit-learn
  • numpy
  • matplotlib
  • joblib

四、重要代码介绍

环境安装好后就可以打开pycharm开始愉快的执行代码了。由于代码众多,博客中就不放入最终代码了,有需要的童鞋可以在博客最下方找到下载地址

1.数据预处理

  • 首先我们需要将时序问题转换为监督学习,才能进行训练。下方代码将输入的时序的收盘价转化为每日收益率并将收益率中滞后一天(默认为一天)的观测值作为监督学习值。
def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
    """
    将时间序列转换为监督学习问题
    Arguments:
        data: 输入数据需要是列表或二维的NumPy数组的观察序列。
        n_in: 输入的滞后观察数(X)。值可以在[1..len(data)]之间,可选的。默认为1。
        n_out: 输出的观察数(y)。值可以在[0..len(data)-1]之间,可选的。默认为1。
        dropnan: Bool值,是否删除具有NaN值的行,可选的。默认为True。
    Returns:
        用于监督学习的Pandas DataFrame。
    """
    # 定义series_to_supervised()函数
    # 将时间序列转换为监督学习问题
    n_vars = 1 if type(data) is list else data.shape[1]
    df = DataFrame(data)
    cols, names = list(), list()
    # input sequence (t-n, ... t-1)
    for i in range(n_in, 0, -1):
        cols.append(df.shift(i))
        names += [('var%d(t-%d)' % (j + 1, i)) for j in range(n_vars)]
    # forecast sequence (t, t+1, ... t+n)
    for i in range(0, n_out):
        cols.append(df.shift(-i))
        if i == 0:
            names += [('var%d(t)' % (j + 1)) for j in range(n_vars)]
        else:
            names += [('var%d(t+%d)' % (j + 1, i)) for j in range(n_vars)]
    # put it all together
    agg = concat(cols, axis=1)
    agg.columns = names
    # drop rows with NaN values
    if dropnan:
        agg.dropna(inplace=True)
    # 删除多余列
    agg.drop(agg.columns[[6, 8, 10]], axis=1, inplace=True)
    print("*" * 20)
    print("完成监督学习转换:")
    print(agg.head())
    return agg
  • 其二就是在数据构建完成后,以一定比率将训练数据和测试数据分离。

2.预测模型构建

  • 因为使用的是LSTM做回归预测,因此模型输出应该不是分类的类别,而是回归值。模型构建代码如下:
def model_create(train_X):
    """
    搭建LSTM模型
    :param train_X:
    :return:
    """
    model = Sequential()
    model.add(LSTM(64, input_shape=(train_X.shape[1], train_X.shape[2])))
    model.add(Dropout(0.5))
    model.add(Dense(1, activation='relu'))
    model.compile(loss='mae', optimizer='adam', metrics=['mse'])
    return model

3.模型训练

3.1 训练参数定义

  • 设置批处理batch_size:100,博主总共跑了100个epoch。
    # 定义callbacks参数
    callbacks = [
        TensorBoard(log_dir=my_log_dir)
    ]

    # 贵金属模型训练
    history1 = lstm_gjs.fit(train_x_gjs, train_y_gjs, epochs=100, batch_size=100,
                            validation_data=(test_x_gjs, test_y_gjs), callbacks=callbacks,
                            verbose=2, shuffle=False)
    # 保存最终模型
    lstm_gjs.save_weights('models/' + 'model_lstm_gjs.tf')

3.2 训练loss及MSE

  • 训练和测试集的loss,可以看到训练至30个epoch左右,loss已经收敛,同时MSE也较低。

  • 贵金属训练曲线:
    贵金属

  • 有色金属训练曲线:

有色金属

  • 化工商品训练曲线:

化工商品


五、完整代码地址

由于项目代码量和数据集较大,感兴趣的同学可以下载完整代码,使用过程中如遇到任何问题可以在评论区进行评论,我都会一一解答。

完整代码下载:
【代码分享】手把手教你:基于LSTM的股票预测系统

**基于LSTM模型股票预测模型** 在金融领域,尤其是股票市场预测,人工智能技术已经被广泛应用。其中,长短期记忆网络(Long Short-Term Memory, LSTM)作为一种递归神经网络(Recurrent Neural Network, RNN)的变体,因其在处理序列数据时能够有效地捕获长期依赖性而备受关注。在这个项目中,我们将深入探讨如何使用Python编程语言结合LSTM模型进行股票价格预测。 **一、LSTM模型** LSTM由Hochreiter和Schmidhuber在1997年提出,其设计目标是解决传统RNN在处理长序列数据时遇到的梯度消失和梯度爆炸问题。LSTM通过引入“门”结构(输入门、遗忘门和输出门)来控制信息的流动,使得模型在处理长期依赖关系时具有更好的性能。 **二、股票预测问题** 股票价格预测是一个复杂的非线性时间序列预测问题,需要考虑众多因素,如历史价格、交易量、市场情绪、宏观经济指标等。LSTM模型因其对序列数据的优秀处理能力,特别适合用于此类任务。 **三、Python环境与库** 1. **NumPy**: 数值计算库,用于处理和分析数据。 2. **Pandas**: 数据处理库,用于读取和操作数据集。 3. **Matplotlib**: 数据可视化库,用于绘制图表。 4. **TensorFlow**或**Keras**: 深度学习框架,用于构建和训练LSTM模型。 **四、数据预处理** 1. **数据获取**: 从公开数据源(如Yahoo Finance、Google Finance等)获取股票历史价格数据。 2. **数据清洗**: 处理缺失值、异常值,确保数据质量。 3. **数据标准化**: 将数据转化为0-1之间,以减少数值差距对模型的影响。 4. **数据分段**: 划分训练集和测试集,通常采用时间序列切片方法。 **五、建立LSTM模型** 1. **定义模型架构**: 创建LSTM层,可以结合其他层(如Dense层、Dropout层)构建更复杂的网络结构。 2. **编译模型**: 指定损失函数(如均方误差)、优化器(如Adam)和评估指标(如精度或MAE)。 3. **训练模型**: 使用训练数据拟合模型,设置合适的批次大小、迭代次数和验证集。 **六、模型评估与预测** 1. **模型评估**: 使用测试集评估模型预测效果,观察损失函数的变化和预测结果的准确性。 2. **预测未来价格**: 输入新的时间序列数据,模型会生成未来一段时间的股票价格预测。 **七、注意事项** 1. 股票市场受多种因素影响,预测结果可能存在误差,不应作为投资决策的唯一依据。 2. 模型可能过拟合或欠拟合,需要调整超参数或采用正则化策略。 3. 数据特征工程的重要性,可以考虑加入更多影响股票价格的因素。 以上就是基于LSTM模型股票预测模型的基本流程和关键知识点。通过实际项目实践,你可以更好地理解LSTM的工作原理,并掌握如何用Python实现这一预测模型。记住,深度学习只是工具,理解和分析市场动态才是关键。
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大雾的小屋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值