GRU实现股票预测(代码)

在TensorFlow2.0,python3.7环境下运行
先创建一个TensorFlow文件,文件名为tushareDemo,运行以下代码

import tushare as ts
import matplotlib.pyplot as plt
df1=ts.get_k_data('600519',ktype='D',start='2010-04-26',end='2020-04-06')
datapath1="./SH600519.csv"
df1.to_csv(datapath1)

再建一个TensorFlow文件,名为stock_predict运行以下代码

import tensorflow as tf
import numpy as np
from tensorflow.keras.layers import  Dropout,Dense,GRU
import matplotlib.pyplot as plt
import os
import pandas as pd
from  sklearn.preprocessing import MinMaxScaler
from  sklearn.metrics import  mean_absolute_error,mean_squared_error
import math
maotai=pd.read_csv('./SH600519.CSV')
training_set=maotai.iloc[0:2426-300, 2:3].values
test_set=maotai.iloc[2426-300:, 2:3].values
sc=MinMaxScaler(feature_range=(0, 1))
training_set_scaled = sc.fit_transform(training_set)##求得训练集的最大值,最小值这些训练集固有的属性,并在训练集上进行归一化
test_set=sc.transform(test_set)#利用训练集的属性对测试集进行归一化
x_train=[]
y_train=[]
x_test=[]
y_test=[]
for i in range(60,len(training_set_scaled)):
    x_train.append(training_set_scaled[i-60:i,0])
    y_train.append(training_set_scaled[i,0])
np.random.seed(7)
np.random.shuffle(x_train)
np.random.seed(7)
np.random.shuffle(y_train)
tf.random.set_seed(7)
x_train,y_train=np.array(x_train),np.array(y_train)
x_train=np.reshape(x_train,(x_train.shape[0],60,1))
for i in range(60,len(test_set)):
    x_test.append(test_set[i-60:i,0])
    y_test.append(test_set[i,0])
x_test,y_test=np.array(x_test),np.array(y_test)
x_test=np.reshape(x_test,(x_test.shape[0],60,1))
model=tf.keras.Sequential([GRU(80,return_sequences=True),
                           Dropout(0.2),
                           GRU(100),
                           Dropout(0.2),
                           Dense(1)
                           ])
model.compile(optimizer=tf.keras.optimizers.Adam(0.01),
              loss='mean_squared_error')#损失函数用均方误差
checkpoint_save_path="./checkpoint/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')
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()
file=open('./weights.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()
predicted_stock_price=model.predict(x_test)
predicted_stock_price=sc.inverse_transform(predicted_stock_price)
real_stock_price=sc.inverse_transform(test_set[60:])
plt.plot(real_stock_price,color='red',label='MaoTai Stock Price')
plt.plot(predicted_stock_price,color='blue',label='Predicted MaoTai Stock Price')
plt.title('MaoTai Stock Price Prediction')
plt.xlabel('Time')
plt.ylabel('MaoTai Stock Price')
plt.legend()
plt.show()
mse=mean_squared_error(predicted_stock_price,real_stock_price)
rmse=math.sqrt(mean_squared_error(predicted_stock_price,real_stock_price))
mae=mean_absolute_error(predicted_stock_price,real_stock_price)
print('均方误差:%.6f'%mse)
print('均方根误差:%.6'%rmse)
print('平均绝对误差:%。6f'%mae)



评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值