首页 > 编程知识 正文

lstm预测股票走势,lstm预测股票准确率一般多少

时间:2023-05-04 13:53:25 阅读:141942 作者:1154

文章目录LSTM模型预测个股收盘价一、前言二、LSTM建模1 .模型升级1.1、LSTM升级1.2、数据集升级2.1、代码分析2.2、相关库部署2.2、模型构建2.4

LTM模型预测个股收盘价1,前言

该情况来源于AI For Trading: LSTM模型预测3天后的收盘价,利用LSTM模型,多个特征指标预测收盘价的项目。

二、LSTM建模LSTM模型是一类RNN,其特点是基于单循环神经网络构建了长短记忆门。 也就是说,在重点关注当前数据中存在的信息的同时,可以发现并存储数据序列中存在的长相关性。 本项目采用LSTM模型预测上证指数3天后的收盘价。 也就是说,使用5月10日前的数据,预测5月15日的收盘价。

1 .模型预测升级LSTM模型的所有股价的能力,模型本身主要是捕捉价格序列中时间序列要素的信息。 对模型进行预测本身是完全没有问题的,但此次模型升级的根本目标是提高预测精度。 关于模式的升级,主要来自两个方面。 一个是模型优化,另一个是数据优化。

1.1 .升级lstmlstm机型大致有六种变形形式,主要特点是针对不同的数据输入类型。 这里选择了Multiple Input模型,即多序列输入、单序列输出。 选择该模型对数据的构建也有很好的促进作用,可以构建hxdxb (多维数组)。 该hxdxb是5维的hxdxb,各维是特征数据,同时可以用n天的方法形成数据片。 这个设计基于两个理由:

数据包含的信息越多,但特征数据越多,提供的信息就越多,成为多因子的雏形。 在保留多特征数据的基础上,保留时间序列数据的主要特征。 也就是说,在不增加特征的情况下,将特征信息加倍。 该数据处理模型非常好于许多传统算法。 许多传统算法还是以单个样本为切片输入所有维度的数据,在捕获时间序列信息方面存在欠缺。

1.2 .升级数据集中的数据是从2010年1月1日—2019年5月10日的大智慧中提取的数据,数据时间段为开放式价格、封闭、卷、真) 根据n个交易日的模式,将数据转换为shape(m,n,5 )中的hxdxb表。 原始数据:上证指数. xlsx

2 .代码分析http://www.Sina.com/jupyternotebook代码

2.1 .相关库部署# 所需的库importpandasaspdimportnumpyasnpfromnumpyimportlogfromsklearn.preprocessingimportminmaxscalerfromkeras.modelsimportssportskeas s import LSTM, denseimportkerasfromsklearn.metrics importr2_ scoreimportrandomimportmatplotlib.pyplotasplt #中文,设置减号设置PLT.rcparamarame PLT.rcparams [ ' axes.unicode _ MINUS ' ]=false 2.2 .生成模型#全局参数,要调整的所有参数其中dim=300 #输出维数,LSTM的网络节点batch_size=535 #培训批处理大小是一次读取多少个样本进行运算,越大运算速度越快,但占用的内存和内存越多,根据自己的机器性能设置此外,该参数还确定了梯度下降算法的下降步数。 #网络构建开始n_steps=days#hxdxb的维度计数n_features=5#hxdxb的维度model_2=sequential(#用于激活函数的relumodel_2.add ) lstm n_features ) )输出层,只要输出节点model_2.add(dense ) )选择优化器和丢失函数,该丢失函数就是线性规划算法

r e t

u r n = l n ( C l o s e t C l o s e t − 1 ) return=ln(frac{Close_{t}}{Close_{t-1}}) return=ln(Closet−1​Closet​​) data = pd.read_excel('上证指数.xlsx')data.head(10)data.info()# 提取本项目所使用的数据data_ = data[['开盘价', '收盘价', '成交量', '成交金额']].loc[(data['日期'] >= '2010-01-01') & (data['日期'] <= '2019-05-10')]data_['日收益率'] = log(data_[['收盘价']]).diff(-1)data_.index = data['日期'].loc[(data['日期'] >= '2010-01-01') & (data['日期'] <= '2019-05-10')]data_.dropna(axis=0, inplace=True)data_.tail(10)data_.shape 2.构建函数

构建两个处理数据生成hxdxb表的函数,一个用带标签输出,另一个只处理输入数据集,生成20X5的切片数据。

def processData(data, lb): X, Y = [], [] for i in range(len(data) - lb - 1): X.append(data[i:(i + lb), 0]) try: Y.append(data[(i + 2 + lb), 0]) except: Y.append(data[(i + lb), 0]) return np.array(X), np.array(Y) def pData(data, lb): X = [] for i in range(len(data) - lb - 1): X.append(data[i:(i + lb)]) return np.array(X) 3.数据清洗 close = data_['收盘价']cl = np.array(close)clcl = cl.reshape(cl.shape[0], 1)clscl = MinMaxScaler()sc2 = MinMaxScaler()cl = scl.fit_transform(cl)cl# 生成标签_, y = processData(cl, days)X = data_.valuesX.shapeX = sc2.fit_transform(X)XX = pData(X, days)X.shape 4.数据集拆分 y_train, y_test = y[:int(y.shape[0] * 0.80)], y[int(y.shape[0] * 0.80):]x_train, x_test = X[:int(X.shape[0] * 0.80)], X[int(X.shape[0] * 0.80):] 2.5.建模 1.训练模型 History = model_2.fit(x_train,y_train,batch_size=batch_size, epochs=epochs, validation_data=(x_test,y_test),shuffle=False) plt.plot(History.history['loss'], label='loss')plt.plot(History.history['val_loss'], label='val loss')plt.legend(loc='best')plt.title('The loss values of real and predict')plt.savefig('D:/mojin/self/try/LSTM/result/真实值与预测值的loss值.jpg')plt.show();

[out]

2.模型评估 单值预测检验序列预测检验预测性能评估 # 随机从测试集中抽取一个单一数据切片进行预测act =[]pred = []i = random.randint(0, x_test.shape[0] - 1)Xt = model_2.predict(x_test[i].reshape(1, days, 5))print('预测值:{}, 实际值:{}'.format(Xt, y_test[i].reshape(-1, 1)))pred.append(Xt)act.append(y_test[i]) # 将测试集中的所有切片以序列的方式进行预测,查看预测结果与真实值的拟合情况。y_pred = model_2.predict(x_test)fig = plt.gcf()plt.figure(figsize=(8, 4))plt.plot(y_test.reshape(-1,1),label='y_test')plt.plot(y_pred,label='Forecast')plt.title('Predict of test data')plt.text(100, 0.4, s='测试集R2:%.3f' % (r2_score(y_test.reshape(-1,1), y_pred)))plt.legend(loc='best')plt.savefig('D:/mojin/self/try/LSTM/result/测试集的预测效果.jpg')plt.show();

[out]

# 描述性统计a = y_test.reshape(-1,1)b = Xtc = a - b #实际值减去预测值c = pd.DataFrame(c)c.describe() 3.保存和载入模型 # 保存模型path = 'D:/mojin/self/try/LSTM/result' # 请自行设置存储路径及文件名,例如:D:\股票\my_modelmodel_2.save(path+'.h5', include_optimizer=True) # 保存模型本体model_2.save_weights(path + '_weights.h5') # 保存模型权重# 载入模型path = 'D:/mojin/self/try/LSTM/result'my_model = keras.models.load_model(path+'.h5')p_1 = my_model.predict(x_test[1].reshape(1, days, 5))p_1p_1 = scl.inverse_transform(p_1)p_1

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。