1 !pip install tushare
2 import tushare as ts
3 import numpy as np
4 import tensorflow as tf
5 from tensorflow.keras.layers import Dropout, Dense, GRU
6 import matplotlib.pyplot as plt
7 import os
8 import pandas as pd
9 from sklearn.preprocessing import MinMaxScaler
10 from sklearn.metrics import mean_squared_error, mean_absolute_error
11 import math
12
13
14 df1 = ts.get_k_data('600519', ktype='D', start='2003-01-01', end='2020-05-14')
15 datapath1 = "./SH600519.csv"
16 df1.to_csv(datapath1)
17
18
19 maotai = pd.read_csv('./SH600519.csv')
20
21 maotai.head()
22 maotai.tail()
23
24 training_set = maotai.iloc[:3000, 2:3].values
25 test_set = maotai.iloc[3000:, 2:3].values
26
27 sc = MinMaxScaler(feature_range=(0, 1))
28 training_set_scaled = sc.fit_transform(training_set)
29 test_set = sc.transform(test_set)
30
31 x_train = []
32 y_train = []
33
34 x_test = []
35 y_test = []
36
37
38 for i in range(60, len(training_set_scaled)):
39 x_train.append(training_set_scaled[i - 60:i, 0])
40 y_train.append(training_set_scaled[i, 0])
41
42
43 np.random.seed(7)
44 np.random.shuffle(x_train)
45 np.random.seed(7)
46 np.random.shuffle(y_train)
47 tf.random.set_seed(7)
48
49
50 x_train, y_train = np.array(x_train), np.array(y_train)
51 x_train = np.reshape(x_train, (x_train.shape[0], 60, 1))
52
53 for i in range(60, len(test_set)):
54 x_test.append(test_set[i-60:i, 0])
55 y_test.append(test_set[i, 0])
56
57 x_test, y_test = np.array(x_test), np.array(y_test)
58
59 x_test = np.reshape(x_test, (x_test.shape[0], 60, 1))
60
61
62 model = tf.keras.Sequential([
63 GRU(80, return_sequences=True),
64 Dropout(0.2),
65 GRU(100),
66 Dropout(0.2),
67 Dense(1)
68 ])
69
70 model.compile(optimizer=tf.keras.optimizers.Adam(0.001),
71 loss='mean_squared_error')
72
73 checkpoint_save_path = "./checkpoint/stock.ckpt"
74
75 if os.path.exists(checkpoint_save_path + '.index'):
76 print("-----------load the model-----------")
77 model.load_weights(checkpoint_save_path)
78
79 cp_callback = tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_save_path,
80 save_weights_only=True,
81 save_best_only=True,
82 monitor='val_loss')
83
84 history = model.fit(x_train, y_train, batch_size=64, epochs=50, validation_data=(x_test, y_test),
85 validation_freq=1, callbacks=[cp_callback])
86
87 model.summary()
88
89
90 with open("./weights.txt", "w") as f:
91 for v in model.trainable_variables:
92 f.write(str(v.name) + '\n')
93 f.write(str(v.shape) + '\n')
94 f.write(str(v.numpy()) + '\n')
95
96
97 loss = history.history['loss']
98 val_loss = history.history['val_loss']
99
100 plt.plot(loss, label='Training Loss')
101 plt.plot(val_loss, label='Validation Loss')
102 plt.title('Training and Validation Loss')
103 plt.legend()
104 plt.show()
105
106
107
108 predicted_stock_price = model.predict(x_test)
109 predicted_stock_price = sc.inverse_transform(predicted_stock_price)
110
111 real_stock_price = sc.inverse_transform(test_set[60:])
112
113 plt.plot(real_stock_price, color='red', label='real_stock_price')
114 plt.plot(predicted_stock_price, color='blue', label='predicted_stock_price')
115 plt.title('MaoTai Stock Price Prediction')
116 plt.xlabel('Time')
117 plt.ylabel('Stock Price')
118 plt.legend()
119 plt.show()
120
121
122 mse = mean_squared_error(predicted_stock_price, real_stock_price)
123 rmse = math.sqrt(mse)
124
125 mae = mean_absolute_error(predicted_stock_price, real_stock_price)
126 print("均方误差: %.6f"%mse)
127 print("均方根误差:%.6f"%rmse)
128 print("平均绝对误差: %.6f"%mae)