基于tensorflow的RBF神经网络股票预测

"""
Created on Mon Mar 30 2020
@author:LC
"""
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
date_axis = np.linspace(0,30,31)
close_price = np.array([911.6,917,932.01,975,976.3,987.1,982.98,979.86,996.35,984,1031.86,1025,987.9,981.2,999.82,984.86,976.06,982.52,981.5,986.09,975.93,968,963.5,947.5,955.87,957.02,953.98,946.36,963,965.03])
open_price = np.array([907,917,940,932.5,969.97,978.3,992,985,985,985.99,1004.52,1025,1020,985.8,986,995.05,979.3,980.93,989.96,981.3,967.8,975.45,968,961.5,955,960,962.3,958.31,945.97,961.97])

def draw_figure():
    plt.figure()
    for i in range(30):
        date = np.zeros([2])
        date[0] = i+1
        date[1] = i+1
        gain = np.zeros([2])
        gain[0] = open_price[i]
        gain[1] = close_price[i]
        if open_price[i] < close_price[i]:
            plt.plot(date,gain,'r',lw=8)
        else:
            plt.plot(date,gain,'g',lw=8)

datenormal = np.zeros([30,1])
pricenormal = np.zeros([30,1])
max_price = max(close_price)
min_price = min(close_price)

for i in range(30):   #归一化处理
    datenormal[i] = (i+1-1) / (30-1)
    pricenormal[i] = (close_price[i]-min_price) / (max_price-min_price)

x=tf.placeholder(tf.float32,shape=[None,1])
y=tf.placeholder(tf.float32,shape=[None,1])

w=tf.Variable(tf.random_uniform([20,1],seed=1))  #隐层至输出层权重
b = tf.Variable(tf.constant(0.1))     #输出层偏置

c=tf.Variable(tf.random_normal([20,1],seed=1))     #中心点
delta=tf.Variable(tf.random_normal([1,20],seed=1))   
dist=tf.reduce_sum(tf.square(tf.subtract(tf.tile(x,[20,1]),c)),1)  #欧氏距离(维度:1*20)
delta_2 = tf.square(delta)
  
rbf_out = tf.exp(tf.multiply(-1.0,tf.divide(dist,tf.multiply(2.0,delta_2))))    #通过径向基函数算得隐层输出

y_pred=tf.nn.relu(tf.matmul(rbf_out,w)+b)   #预测输出

mse = tf.reduce_mean(tf.square(y-y_pred))  #损失函数为均方误差

train_step = tf.train.GradientDescentOptimizer(0.01).minimize(mse)

with tf.Session() as sess:
    tf.global_variables_initializer().run()
    pred=np.zeros([30,1])
    for step in range(1000):
        for i in range(len(datenormal)):
            sess.run(train_step,feed_dict={x:np.mat(datenormal)[i],y:np.mat(pricenormal)[i]})
        if step % 100 == 0:
            for j in range(len(datenormal)):
                loss = sess.run(mse,feed_dict={x:np.mat(datenormal)[j],y:np.mat(pricenormal)[j]})
                y_ = sess.run(y_pred,feed_dict={x:np.mat(datenormal)[j]})
                pred[j,0] = (y_*(max_price-min_price)+min_price)[0]
            draw_figure()
            plt.plot(date_axis[1:],pred.tolist(),'b',linewidth=2)
            plt.grid()
            plt.show()
            print("After %d training steps,mse on all data is %g"%(step,loss))

在这里插入图片描述
After 0 training steps,mse on all data is 0.119859
在这里插入图片描述
After 100 training steps,mse on all data is 8.58006e-07

在这里插入图片描述
After 200 training steps,mse on all data is 4.60739e-07

在这里插入图片描述
After 300 training steps,mse on all data is 2.34644e-05
在这里插入图片描述
After 400 training steps,mse on all data is 3.86041e-05
在这里插入图片描述
After 500 training steps,mse on all data is 4.16582e-05
在这里插入图片描述
After 600 training steps,mse on all data is 4.10633e-05

在这里插入图片描述
After 700 training steps,mse on all data is 3.91262e-05

在这里插入图片描述
After 800 training steps,mse on all data is 3.70629e-05

在这里插入图片描述
After 900 training steps,mse on all data is 3.54646e-05

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于RBF神经网络的电力负荷预测是一种常见的预测方法。RBF神经网络是一种前向网络,其中径向基函数用作隐含层的激活函数。通过将输入信号映射到隐含层空间,RBF神经网络可以对电力负荷进行非线性映射。与BP神经网络相比,RBF神经网络具有更高的精确度和较快的训练速度。 在RBF神经网络中,径向基函数的选择对于负荷预测非常重要。通常情况下,高斯函数被用作径向基函数,形成隐含层空间。输入层直接传递输入信号到隐含层,无需通过权重连接,从而将输入矢量映射到隐含层空间。这种映射关系在RBF的变换中心确定之后自然确定。RBF神经网络的输出是非线性的,而对于可调参数而言,网络输出是线性的。因此,RBF神经网络需要比BP神经网络更多的节点,但训练时间却较短,且具有更高的精确度。 基于RBF神经网络的电力负荷预测方法已经在多项研究中得到了应用。研究者们结合了分位数回归和RBF神经网络来预测电力负荷的概率密度。同时,还有研究使用RBF神经网络模型来进行电力系统的短期负荷预测。 因此,基于RBF神经网络的电力负荷预测方法在实际应用中具有一定的可行性和实用性。它能够通过非线性映射对电力负荷进行预测,并且具有较高的精确度和较快的训练速度。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [基于 RBF人工神经网络的电力系统短期负荷预测研究](https://blog.csdn.net/qq_42059684/article/details/131067010)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值