lstm不收敛_LSTM原理及实践(二):预测收盘价

本文使用PyTorch实现LSTM模型,利用ETF的开盘、高点、低点和收盘价数据预测下一个交易日的收盘价。通过数据预处理、模型构建、训练与测试,展示了一个LSTM在时序预测中的应用实例。尽管模型在训练和测试中取得了一定效果,但在后期预测中出现准确性下降的问题。
摘要由CSDN通过智能技术生成

c65bbc7d71c4668270edf5466f0d96fa.png

介绍完上一节的理论后,我们来实际运用一下,运用ETFs的开高低收四个来预测下一个工作日的收盘价。此文只是写lstm的运用的一个例子,请不要运用于真实预测。。。因为ETFs,stock的价格不仅仅只是时序序列这么简单。

这个项目主要用了pytorch,是一个我本人比较喜欢感觉比较容易上手的深度学习框架。

  1. 数据读取以及处理:
# 导入相关包

读入ETFs数据,把时间作为index,只留下开高低收四个变量用于后续:

dates     = pd.date_range('2010-10-11','2017-10-11',freq = 'B')
df_main   = pd.DataFrame(index = dates)
df_aaxj   = pd.read_csv("data/ETFs/aaxj.us.txt", parse_dates=True, index_col=0)
df_main   = df_main.join(df_aaxj)
sel_col   = ['Open', 'High', 'Low', 'Close']
df_main   = df_main[sel_col]

得到df_main:

7644790119e8159a58f6afaa74218298.png

进行minmaxscaler,防止在之后的训练过程中不收敛:

df_main = df_main.fillna(method='ffill')
scaler = MinMaxScaler(feature_range=(-1, 1))
for col in sel_col:
    df_main[col] = scaler.fit_transform(df_main[col].values.reshape(-1,1))

创造需要预测的序列。因为我们要预测下一个时间的收盘价,所以把close向上shift1个单位:

df_main['target'] = df_main['Close'].shift(-1) 
df_main.dropna()
df_main = df_main.astype(np.float32)

接下来要根据LSTM需要的数据格式来创造数据集。Lstm需要的输入是一个3D array[x,y,z],其中x是样本数,y是seq length,即需要看多少天的数据,z是特征数

def create_seq_data(data_raw,seq):
    data_feat,data_target = [],[]
    for index in range(len(data_raw) - seq):
        # 构建特征集
        data_feat.append(data_raw[['Open'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值