TensorFlow深度学习!构建神经网络预测股票价格!?( 二 )


TensorFlow深度学习!构建神经网络预测股票价格!?

文章插图
# 构建滑窗数据import numpy.libfrom numpy.lib.stride_tricks import sliding_window_viewdef genWindows(X_in, y_in, window_size):X_out = []y_out = []length = X_in.shape[0]for i in range(window_size, length):X_out.append(X_in[i-window_size:i, 0:4])y_out.append(y_in[i-1])return np.array(X_out), np.array(y_out)# 窗口大小为5window_size = 5X_train_win, y_train_win = genWindows(np.array(train_x), np.array(train_y), window_size)X_test_win, y_test_win = genWindows(np.array(test_x), np.array(test_y), window_size)模型构建&训练构建完数据之后,我们就要构建 RNN 模型了,具体的代码如下所示 。注意到下面使用了1个回调函数,模型会在验证集性能没有改善的情况下提前停止训练 , 防止模型过拟合影响泛化能力 。
from tensorflow.keras import callbacks# 早停止 回调函数callback_early_stopping = callbacks.EarlyStopping(monitor="loss",patience=10,#look at last 10 epochsmin_delta=0.0001,#loss must improve by this amountrestore_best_weights=True,)from tensorflow import kerasfrom tensorflow.keras import layersfrom keras.models import Sequential# 构建RNN模型,结构为 输入-RNN-RNN-连续值输出input_shape=(X_train_win.shape[1],X_train_win.shape[2])print(input_shape)model = Sequential([layers.Input(shape=input_shape),layers.SimpleRNN(units=128, return_sequences=True),layers.SimpleRNN(64, return_sequences=False),layers.Dense(1, activation="linear"),])# 优化器optimizer = keras.optimizers.Nadam(learning_rate=0.0001)model.compile(optimizer=optimizer, loss="mse")# 模型结构总结model.summary()# 模型训练batch_size = 20epochs = 50history = model.fit(X_train_win, y_train_win,batch_size=batch_size, epochs=epochs,callbacks=[callback_early_stopping])模型训练过程的损失函数(训练集上)的变化如下图所示 。随着训练过程推进,模型损失不断优化,初期的优化和loss减小速度很快 , 后逐渐趋于平稳 。
TensorFlow深度学习!构建神经网络预测股票价格!?

文章插图
大约 10 个 epoch 后达到了最佳结果,训练好的模型就可以用于后续预测了,我们可以先对训练集进行预测 , 验证一下在训练集上学习的效果 。
# 训练集预测pred_train_y = model.predict(X_train_win)# 绘图plt.figure(figsize=(15, 6), dpi=80)plt.plot(np.array(train_y))plt.plot(pred_train_y)plt.legend(['Actual', 'Predictions'])plt.show()模型在训练集上学习的效果还不错,大家可以看到预测结果和真实值对比绘图如下:
TensorFlow深度学习!构建神经网络预测股票价格!?

文章插图
模型预测&应用我们要评估模型的真实表现,需要在它没有见过的测试数据上评估,大家记得我们在数据切分的时候预留了 20% 的数据,下面我们用模型在这部分数据上预测并评估 。
# 测试集预测pred_test_y = model.predict(X_test_win)# 预测结果绘制plt.figure(figsize=(15, 6), dpi=80)plt.plot(np.array(test_y))plt.plot(pred_test_y)plt.legend(['Actual', 'Predictions'])plt.show()
TensorFlow深度学习!构建神经网络预测股票价格!?

文章插图
相对训练集来说,大家看到测试集上的效果稍有偏差,但是总体趋势还是预测得不错 。
我们要考察这个模型对于时间序列预测的泛化能力,可以进行更严格一点的建模预测,比如将训练得到的模型应用与另一支完全没见过的股票上进行预测 。如下为我们训练得到的模型对 Microsoft/微软股票价格的预测:
TensorFlow深度学习!构建神经网络预测股票价格!?

文章插图
TensorFlow深度学习!构建神经网络预测股票价格!?

文章插图
我们从图上可以看到,模型表现良好(预测存在一定程度的噪音,但它对总体趋势的预测比较准确) 。
参考资料
  • 深度学习教程:吴恩达专项课程 · 全套笔记解读:https://www.showmeai.tech/tutorials/35
  • 自然语言处理教程:斯坦福CS224n课程 · 课程带学与全套笔记解读:https://www.showmeai.tech/tutorials/36
  • 深度学习教程 | 序列模型与RNN网络:https://www.showmeai.tech/article-detail/225
  • NLP教程(5) - 语言模型、RNN、GRU与LSTM:https://www.showmeai.tech/article-detail/239

TensorFlow深度学习!构建神经网络预测股票价格!?

文章插图

推荐阅读