小言_互联网的博客

TensorFlow神经网络实现股票预测

691人阅读  评论(0)

目录

1、数据来源

2、数据可视化

3、神经网络设计


神经网络(NeuralNetworks)是一种用训练数据拟合目标函数的黑箱模型,只要数据量足够大,它可以拟合出输入到输出之间的任意函数关系。

本篇博文将使用TensorFlow神经网络进行股市的预测,利用数据样本学习,得到相关因素预测股票走势。

1、数据来源

首先预设一组数据,下图为股票上证指数2019年07月到2019年09月的30天开盘价格和收盘价格。

数据在程序中实现,代码如下所示:


  
  1. date = np.linspace( 1, 30, 30)
  2. beginPrice = np.array([ 2923.19, 2928.06, 2943.92, 2946.26, 2944.40, 2920.85, 2861.33, 2854.58, 2776.69, 2789.02,
  3. 2784.18, 2805.59, 2781.98, 2798.05, 2824.49, 2762.34, 2817.57, 2835.52, 2879.08, 2875.47,
  4. 2887.66, 2885.15, 2851.02, 2879.52, 2901.63, 2896.00, 2907.38, 2886.94, 2925.94, 2927.75])
  5. endPrice = np.array([ 2937.36, 2944.54, 2941.01, 2952.34, 2932.51, 2908.77, 2867.84, 2821.50, 2777.56, 2768.68,
  6. 2794.55, 2774.75, 2814.99, 2797.26, 2808.91, 2815.80, 2823.82, 2883.10, 2880.00, 2880.33,
  7. 2883.44, 2897.43, 2863.57, 2902.19, 2893.76, 2890.92, 2886.24, 2924.11, 2930.15, 2957.41])

2、数据可视化

基于matplotlib可视化库,建立一个30行2列的矩阵存储股票数据,矩阵的第一列输入上列数据中的股票开盘价格,第二列输入股票的收盘价格,如果股票的收盘价格高于开盘价格则用红色显示,反之则用绿色显示,可视化股票数据如下图所示。采用本实例所设计的神经网络预测股票收盘均价,并可视化预测结果。

使用前需要安装matplotlib模块,指令如下所示:

pip install matplotlib

实现代码如下所示:


  
  1. for i in range( 0, 30): # 画柱状图
  2. dateOne = np.zeros([ 2])
  3. dateOne[ 0] = i;
  4. dateOne[ 1] = i;
  5. priceOne = np.zeros([ 2])
  6. priceOne[ 0] = beginPrice[i]
  7. priceOne[ 1] = endPrice[i]
  8. if endPrice[i]>beginPrice[i]:
  9. plt.plot(dateOne,priceOne, 'r',lw= 6)
  10. else:
  11. plt.plot(dateOne,priceOne, 'g',lw= 6)
  12. plt.xlabel( "date")
  13. plt.ylabel( "price")

3、神经网络设计

基于TensorFlow框架,设计三层神经网络,隐含层包括25个节点,利用所设计的神经网络来预测股票的收盘均价。使用前需要安装TensorFlow模块,指令如下所示:

pip install tensorflow

【拓展】4行指令解决pip下载Python第三方库太慢问题(pip更换国内下载源)

实现代码如下所示:


  
  1. dateNormal = np.zeros([ 30, 1])
  2. priceNormal = np.zeros([ 30, 1])
  3. #归一化
  4. for i in range( 0, 30):
  5. dateNormal[i, 0] = i/ 29.0;
  6. priceNormal[i, 0] = endPrice[i]/ 3000.0;
  7. x = tf.placeholder(tf.float32,[ None, 1])
  8. y = tf.placeholder(tf.float32,[ None, 1])
  9. # X->hidden_layer
  10. w1 = tf.Variable(tf.random_uniform([ 1, 25], 0, 1))
  11. b1 = tf.Variable(tf.zeros([ 1, 25]))
  12. wb1 = tf.matmul(x,w1)+b1
  13. layer1 = tf.nn.relu(wb1) # 激励函数
  14. # hidden_layer->output
  15. w2 = tf.Variable(tf.random_uniform([ 25, 1], 0, 1))
  16. b2 = tf.Variable(tf.zeros([ 30, 1]))
  17. wb2 = tf.matmul(layer1,w2)+b2
  18. layer2 = tf.nn.relu(wb2)
  19. loss = tf.reduce_mean(tf.square(y-layer2)) #y为真实数据, layer2为网络预测结果
  20. #梯度下降
  21. train_step = tf.train.GradientDescentOptimizer( 0.1).minimize(loss)
  22. with tf.Session() as sess:
  23. sess.run(tf.global_variables_initializer())
  24. for i in range( 0, 20000):
  25. sess.run(train_step,feed_dict={x:dateNormal,y:priceNormal})
  26. #预测, X w1w2 b1b2 -->layer2
  27. pred = sess.run(layer2,feed_dict={x:dateNormal})
  28. predPrice = np.zeros([ 30, 1])
  29. for i in range( 0, 30):
  30. predPrice[i, 0]=(pred* 3000)[i, 0]
  31. plt.plot(date,predPrice, 'b',lw= 1)
  32. plt.show()

运行以上代码可视化神经网络的预测结果如下图所示:

关注公众号,回复关键字:股票预测,获取项目源码~


转载:https://blog.csdn.net/m0_38106923/article/details/108956942
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场