博客
关于我
7神经网络逼近股票收盘均价2
阅读量:343 次
发布时间:2019-03-04

本文共 3970 字,大约阅读时间需要 13 分钟。

神经网络逼近股票收盘均价2

  1. 神经网络基本原理
  • 输入层、中间层隐藏层、输出层

  • 输入矩阵A(15X1)

    隐藏矩阵B(1X10)

    输出矩阵C(15X1)

  • 功能:

    输入:天数

    输出:每天股价

    公式: Aw1+b1=B Bw2+b2=C

    (A输入层矩阵 )(B 中间层矩阵)(C 输出层矩阵)

    权重矩阵w1 (1x10) w2(10x1)

    偏置矩阵b1 (1x10) b2(15x1)

    A(15x1) *w1(1x10)+b1(1x10)=B (15x10)

    B(15x10)*w2(10x1)+b2(15x1)=C (15x1)

    第一次循环使用简单数据

  • 1次循环:A: 1天 w1w2b1b2(初始值0.1 0.2 0.3)---->C(预测出第一天的股价)

    例如:预测值2400 实际值2511 差值111点

  • 2次循环:

    “梯度下降法” 目的:缩小预测值与实际值之间的差值

    方法:修改权重w以及偏置b,得到新的预测值例如24500 差值61

  • 一直循环,终止法一循环次数,法二差异控制,例如百分之二以内

  • 最后输出最终的w与b

  • 实质就是求直线的两个重要参数:斜率和偏移

  1. 代码实现
# layer1:激励函数+乘加运算import tensorflow as tfimport numpy as npimport matplotlib.pyplot as pltdate = np.linspace(1,15,15)endPrice = np.array([2511.90,2538.26,2510.68,2591.66,2732.98,2701.69,2701.29,2678.67,2726.50,2681.50,2739.17,2715.07,2823.58,2864.90,2919.08])beginPrice = np.array([2438.71,2500.88,2534.95,2512.52,2594.04,2743.26,2697.47,2695.24,2678.23,2722.13,2674.93,2744.13,2717.46,2832.73,2877.40])print('天数为:\n',date)print('收盘价格为:\n',endPrice)print('开盘价格为:\n',beginPrice)plt.figure()for i in range(0,15):    # 1 柱状图    dateOne = np.zeros([2])    dateOne[0] = i;    dateOne[1] = i;    priceOne = np.zeros([2])    priceOne[0] = beginPrice[i]    priceOne[1] = endPrice[i]    if endPrice[i]>beginPrice[i]:        plt.plot(dateOne,priceOne,'r',lw=8)    else:        plt.plot(dateOne,priceOne,'g',lw=8)#plt.show()# A(15x1)*w1(1x10)+b1(1*10) = B(15x10)# B(15x10)*w2(10x1)+b2(15x1) = C(15x1)# 1输入层 A  中间层B  输出C #方便计算进行归一化处理dateNormal = np.zeros([15,1]) #日期priceNormal = np.zeros([15,1]) #价格# 输入数据进行归一化处理(除法)for i in range(0,15):    dateNormal[i,0] = i/14.0; #14.0浮点数 注意下标    priceNormal[i,0] = endPrice[i]/3000.0;  #最大值不会超过3000x = tf.placeholder(tf.float32,[None,1])  #  f.float32 制定当前数据类型 [None,1] N 行一列y = tf.placeholder(tf.float32,[None,1])# 定义隐藏层B# 由于梯度下降算法,要对权重w与偏移b进行修改,所以必须是变量Variablew1 = tf.Variable(tf.random_uniform([1,10],0,1)) # random_uniform随机值初始化 权重随机b1 = tf.Variable(tf.zeros([1,10])) # 偏移初始为0wb1 = tf.matmul(x,w1)+b1 # 公式运算 A(15x1)*w1(1x10)+b1(1*10) = B(15x10)layer1 = tf.nn.relu(wb1) # 激励函数,将结果进行映射,变为另外一种结果# 定义输出层Cw2 = tf.Variable(tf.random_uniform([10,1],0,1)) # 10行 1列b2 = tf.Variable(tf.zeros([15,1]))  # 15 行 1列wb2 = tf.matmul(layer1,w2)+b2layer2 = tf.nn.relu(wb2) # #激励函数,将结果进行映射,变为另外一种结果# 计算预测值与实际值之间的差异loss = tf.reduce_mean(tf.square(y-layer2))#y 真实值 layer2 计算的预测值 reduce_mean均值 square开放 标准差# 使用梯度下降法GradientDescentOptimizertrain_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss) # 参数1(0.1)每层调整0.1  目的减小loss minimize(loss)# 运行程序with tf.Session() as sess:    # 完成变量初始化    sess.run(tf.global_variables_initializer())    # 开始训练 终止通过循环次数控制10000    for i in range(0,10000):        # 输入已经归一化的dateNormal   priceNormal        sess.run(train_step,feed_dict={   x:dateNormal,y:priceNormal})    # 利用训练好的 w 和 b 给出预测结果 w1w2 b1b2  A + wb -->layer2    pred = sess.run(layer2,feed_dict={   x:dateNormal})    # 定义predPrice    predPrice = np.zeros([15,1]) # 初始化    # 对15天数据完成价格计算预测,    for i in range(0,15):        predPrice[i,0]=(pred*3000)[i,0]  # (pred*3000)[i,0]转化为i 行n列数据    #完成预测数据打印并绘制    print('预测价格:',predPrice)    plt.plot(date,predPrice,'b',lw=1)plt.show()
  • 结果:
天数为: [ 1.  2.  3.  4.  5.  6.  7.  8.  9. 10. 11. 12. 13. 14. 15.]收盘价格为: [2511.9  2538.26 2510.68 2591.66 2732.98 2701.69 2701.29 2678.67 2726.5 2681.5  2739.17 2715.07 2823.58 2864.9  2919.08]开盘价格为: [2438.71 2500.88 2534.95 2512.52 2594.04 2743.26 2697.47 2695.24 2678.23 2722.13 2674.93 2744.13 2717.46 2832.73 2877.4 ]预测价格: [[2511.89672852] [2538.26318359] [2510.68310547] [2591.66162109] [2732.97851562] [2701.69165039] [2701.29077148] [2678.67016602] [2726.5       ] [2681.50048828] [2739.1706543 ] [2715.0715332 ] [2823.57836914] [2864.8984375 ] [2919.07836914]]

[2678.67016602]
[2726.5 ]
[2681.50048828]
[2739.1706543 ]
[2715.0715332 ]
[2823.57836914]
[2864.8984375 ]
[2919.07836914]]

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200323165533602.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2R1anVhbmNhbzEx,size_16,color_FFFFFF,t_70)

转载地址:http://pyfr.baihongyu.com/

你可能感兴趣的文章
JavaWeb用户信息管理系统-创建登录业的务持久层
查看>>
SpringIoC和DI注解开发
查看>>
Java类和对象
查看>>
Java集合Collection
查看>>
SpringMVC入门-概述和基本配置
查看>>
SpringBoot快速入门
查看>>
医疗管理系统-手机快速登录和SpringSecurity权限控制
查看>>
SpringCloud微服务简介
查看>>
网页实现微信登录
查看>>
vue源码分析(MVVM篇)
查看>>
vue源码分析(observe篇)
查看>>
ElasticSearch 快照备份和还原
查看>>
React(八)- ReactUI组件库及Redux的使用
查看>>
TypeScript系列(一)- TypeScript简介与编译配置
查看>>
TypeScript系列文章导航
查看>>
TypeScript系列(二)- Webpack打包TS代码
查看>>
Windows系统Git安装教程
查看>>
hibernate和mybatis的区别
查看>>
你为什么从大公司离职,去一家创业公司?
查看>>
MyBatis学习总结(三)——优化MyBatis配置文件中的配置
查看>>