700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 使用深度学习中的循环神经网络(LSTM)进行股价预测

使用深度学习中的循环神经网络(LSTM)进行股价预测

时间:2018-09-26 22:25:50

相关推荐

使用深度学习中的循环神经网络(LSTM)进行股价预测

tushare ID:468684

一、开发环境:

操作系统:Windows10开发工具:PyCharm .1.1 (Professional Edition)Python版本:Python3.6深度学习框架TensorFlow2.6.2数据来源:tushare使用的库:tushare、Numpy、tensorflow.keras.layers、matplotlib.pyplotpandas、sklearn.preprocessing、sklearn.metrics 、math、tensorflow 、tensorflow.python.client 、os

二、TensorFlow安装与简介

三、LSTM简介与动手实现

四、tushare简介与使用

五、代码实现

使用TensorFlow API:tf.keras搭建网络六步法:

importtrain,testmodel=tf.keras.pilemodel.fitmodel.summary

第一步,导入相关包

import numpy as npfrom tensorflow.keras.layers import Dropout, Dense, LSTMimport tushare as tsimport matplotlib.pyplot as pltimport pandas as pdfrom sklearn.preprocessing import MinMaxScalerfrom sklearn.metrics import mean_squared_error, mean_absolute_errorimport mathimport tensorflow as tffrom tensorflow.python.client import device_libimport os

第二步,获取数据并划分训练集和测试集

df1 = ts.get_k_data('股票代码', ktype='D', start='开始日期', end='结束日期')datapath1 = "./股票代码.csv"df1.to_csv(datapath1)print(df1.head())data = pd.read_csv('./股票代码.csv') # 读取股票文件training_set = data.iloc[0:2426 - 300, 2:3].values # 前(2426-300=2126)天的开盘价作为训练集,表格从0开始计数,2:3 是提取[2:3)列,前闭后开,故提取出C列开盘价test_set =data.iloc[2426 - 300:, 2:3].values # 后300天的开盘价作为测试集# 归一化sc = MinMaxScaler(feature_range=(0, 1)) # 定义归一化:归一化到(0,1)之间training_set_scaled = sc.fit_transform(training_set) # 求得训练集的最大值,最小值这些训练集固有的属性,并在训练集上进行归一化test_set = sc.transform(test_set) # 利用训练集的属性对测试集进行归一化x_train = []y_train = []x_test = []y_test = []

第三步,model=tf.keras.models.Sequential

class MyModel(Model):

def __init__(self):

super(MyModel, self).__init__()

定义网络结构块

def call(self, x):

调用网络结构块,实现前向传播

return y

model = MyModel()

第四步,pile

pile(optimizer=tf.keras.optimizers.Adam(0.001),loss='mean_squared_error') # 损失函数用均方误差# 该应用只观测loss数值,不观测准确率,所以删去metrics选项,一会在每个epoch迭代显示时只显示loss值checkpoint_save_path = "./checkpoint/LSTM_stock.ckpt"if os.path.exists(checkpoint_save_path + '.index'):print('-------------load the model-----------------')model.load_weights(checkpoint_save_path)cp_callback = tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_save_path,save_weights_only=True,save_best_only=True,monitor='val_loss')

第五步,model.fit

history = model.fit(x_train, y_train, batch_size=64, epochs=50, validation_data=(x_test, y_test), validation_freq=1,callbacks=[cp_callback])

第六步,model.summary

model.summary()

此外,还可以loss可视化

file = open('./weights_changyingjingmi.txt', 'w') # 参数提取for v in model.trainable_variables:file.write(str(v.name) + '\n')file.write(str(v.shape) + '\n')file.write(str(v.numpy()) + '\n')file.close()loss = history.history['loss']val_loss = history.history['val_loss']plt.plot(loss, label='Training Loss')plt.plot(val_loss, label='Validation Loss')plt.title('Training and Validation Loss')plt.legend()plt.show()################## predict ####################### 测试集输入模型进行预测predicted_stock_price = model.predict(x_test)# 对预测数据还原---从(0,1)反归一化到原始范围predicted_stock_price = sc.inverse_transform(predicted_stock_price)# 对真实数据还原---从(0,1)反归一化到原始范围real_stock_price = sc.inverse_transform(test_set[60:])# 画出真实数据和预测数据的对比曲线plt.plot(real_stock_price, color='red', label='XXXXX Stock Price')plt.plot(predicted_stock_price, color='blue', label='Predicted XXXXX Stock Price')plt.title('Changyingjingmi Stock Price Prediction(LSTM)')plt.xlabel('Time')plt.ylabel('XXXXX Stock Price')plt.legend()plt.show()##########evaluate############### calculate MSE 均方误差 ---> E[(预测值-真实值)^2] (预测值减真实值求平方后求均值)mse = mean_squared_error(predicted_stock_price, real_stock_price)# calculate RMSE 均方根误差--->sqrt[MSE] (对均方误差开方)rmse = math.sqrt(mean_squared_error(predicted_stock_price, real_stock_price))# calculate MAE 平均绝对误差----->E[|预测值-真实值|](预测值减真实值求绝对值后求均值)mae = mean_absolute_error(predicted_stock_price, real_stock_price)print('均方误差: %.6f' % mse)print('均方根误差: %.6f' % rmse)print('平均绝对误差: %.6f' % mae)

运行效果截图:

参考文献:

1.Sepp Hochreiter,Jurgen Schmidhuber.LONG SHORT-TERM MEMORY.Neural Computation,December 1997

2.浙江大学慕课《深度学习》,胡浩基

3.北京大学慕课《人工智能实践:TensorFlow笔记》,曹健

4.知乎《LSTM模型结构的可视化》,master苏

5.复旦大学慕课《深度学习及其应用》,赵卫东,董亮

6.浙江大学慕课《人工智能:模型与算法》,吴飞

7.微信公众号数盟,《深度解析LSTM神经网络的设计原理》

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。