使用tensorflow:LSTM神经网络预测股票(二)

本文介绍了在使用LSTM预测股票收益时遇到的收敛难题,通过将连续收益转换为分类问题,降低了网络训练的复杂性。现在,LSTM网络将预测分为三个收益类别,并应用softmax激活函数。此外,提供了数据处理和TensorFlow代码片段,以及交流和获取完整数据的方式。

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

与第一版相比的改进点

上一篇博客 直接预测收益,训练过程中通过观察预测值的变动,发现LSTM网络收敛起来非常困难,几百万行数据下来,也没有比较明显的收敛迹象。我分析原因有可能为:一行60个交易日,下一行的60个交易日有59个实际上并没有变,即大部分输入数据并未变动,但是收益变动可能会非常巨大(股票的价格变动),如图所示:
数据生成示意图
收益相对剧烈的变动,给网络的收敛带来了巨大的困难。碍于硬件资源的限制,我没有再尝试更加复杂的网络深度,转而尝试降低收益的波动,具体方法为:
1. 将收益分成3类:收益小于0%,收益小于5%,收益大于等于5%,对应[1, 0, 0]、[0, 1, 0]、[0, 0, 1] 3种输出。
2. 给LSTM网络输出层套上softmax激励函数,将预测收益改为分类问题。

这样做在功能性上牺牲了些,换来了收益波动的减小,网络收敛难度降低。

补充:大家可以通过更改分类和输出层参数,使其降低到二元分类问题,进一步降低收益的波动,例如:小于8%和大于等于8%、处于3%-5%和不处于等。

股票预测相关代码

数据部分

上一篇 相比,数据部分在输出时将股价替换成3种类型输出,输出的数据矩阵从1列改为了3列。

tensorflow 代码

数据部分
class get_stock_data():
    """
    获得股票分类数据,用以深度学习。格式为按照时间顺序,由小到大排序的:
    [开盘价, 最高价, 最低价, 收盘价,换手率,成交量, 流通市值, 真实收益, 日期]
    真实收益定义:下一个交易日开盘买入,再下一个交易日开盘卖出所得到的收益,算法为 100 * (open_next_next / open_next - 1)。
    > 如果真实收益的回归预测效果一般,可以再试试分类预测:真实收益>= n 和 <n 等
    """
    def __init__(self,):
        self.file_paths = {}

    def get_train_test_data_softmax(self, batch_size, file_path, time_step = 60):
        """
        将收益变成分类问题。分类定义在classify函数内,分别为:
            0: <= 0%
            1: (0%, 5%)
            2: [5%, 以上)
        """

        self_variable_name = "data_cur_{0}".format(file_path)
        if self_variable_name in self.file_paths:
            curs
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值