matlab实现BP算法,预测上证指数涨跌

版权声明:所有文章都是自己编写整理,可以转载分享。--Zen in Zen https://blog.csdn.net/weixin_32393347/article/details/85928797

基本情况

  1. 对于很多人人为,股票预测是一个很难的问题。其实不然,运用今天这种数学工具你可以大概预测出股票的短期走势。因为长期走势受很多因素的影响。

  2. 运用MATLAB神经网络工具箱,快速建立BP网络结构。那么你会问什么是神经网络,那么我下面就给大家简单的介绍一下:

  3. 人工神经网络就是模拟人思维的第二种方式。这是一个非线性动力学系统,其特色在于信息的分布式存储和并行协同处理。虽然单个神经元的结构极其简单,功能有限,但大量神经元构成的网络系统所能实现的行为却是极其丰富多彩的。

  4. 人工神经网络首先要以一定的学习准则进行学习,然后才能工作。现以人工神经网络对手写“A”、“B”两个字母的识别为例进行说明,规定当“A”输入网络时,应该输出“1”,而当输入为“B”时,输出为“0”。

  5. 所以网络学习的准则应该是:如果网络作出错误的的判决,则通过网络的学习,应使得网络减少下次犯同样错误的可能性。首先,给网络的各连接权值赋予(0,1)区间内的随机值,将“A”所对应的图象模式输入给网络,网络将输入模式加权求和、与门限比较、再进行非线性运算,得到网络的输出。在此情况下,网络输出为“1”和“0”的概率各为50%,也就是说是完全随机的。这时如果输出为“1”(结果正确),则使连接权值增大,以便使网络再次遇到“A”模式输入时,仍然能作出正确的判断。

  6. 如果输出为“0”(即结果错误),则把网络连接权值朝着减小综合输入加权值的方向调整,其目的在于使网络下次再遇到“A”模式输入时,减小犯同样错误的可能性。如此操作调整,当给网络轮番输入若干个手写字母“A”、“B”后,经过网络按以上学习方法进行若干次学习后,网络判断的正确率将大大提高。这说明网络对这两个模式的学习已经获得了成功,它已将这两个模式分布地记忆在网络的各个连接权值上。当网络再次遇到其中任何一个模式时,能够作出迅速、准确的判断和识别。一般说来,网络中所含的神经元个数越多,则它能记忆、识别的模式也就越多。

  7. 如图所示拓扑结构的单隐层前馈网络,一般称为三层前馈网或三层感知器,即:输入层、中间层(也称隐层)和输出层。它的特点是:各层神经元仅与相邻层神经元之间相互全连接,同层内神经元之间无连接,各层神经元之间无反馈连接,构成具有层次结构的前馈型神经网络系统。单计算层前馈神经网络只能求解线性可分问题,能够求解非线性问题的网络必须是具有隐层的多层神经网络。

!BP神经网络

BP网络源代码

%bp.m​

%处理数据

clear

close all

echo on  %窗口响应执行过程

clc

pause

a=xlsread('learn.xls',1,'A2:A301');%样本时间序号

a1=xlsread('learn.xls',1,'A7:A301');%预测时间序号

b=xlsread('learn.xls',1,'C2:C301');%读取指数

for i=1:1:295

    y(i)=b(i+5);%理想输出

end       

for i=1:1:295

    for j=1:1:5

        x(j,i)=b(i+j-1);%输入

    end

end

a

x    %以前五日预测明天的大盘指数的输入矩阵

y    %理想的输出

%pause

[xn,minx,maxx,yn,miny,maxy]=premnmx(x,y) %数据归一化处理

xn

yn

%pause

tic;

%建立神经网络

net=newff(minmax(xn),[11,1],{'tansig','purelin'},'trainlm');

net.trainparam.show=50;    %显示迭代过程

net.trainparam.lr=0.5;    %学习率

net.trainparam.epochs=1000; %最大训练次数

net.trainparam.goal=1e-3;  %训练要求精度

net.trainparam.mc=0;     %动量因子

 [net,tr]=train(net ,xn,yn); %训练bp网络

t = toc;

t

pause

inputWeights=net.iw{1,1} %输入层权值

inputbias=net.b{1}      %输入层阈值

layerWeights=net.lw{2,1} %输出层权值

layerbias=net.b{2}       %输出层阈值

%对网络仿真预测

On = sim (net ,xn);

E=On-yn %计算误差

M=sse(E) 

N=mse(E)

%pause

 

a2=postmnmx(On,miny,maxy)

plot(a1,xn)

title('归一化处理后的样本','FontSize',12);

xlabel('统计时间2014.9.6-2015.11.10','FontSize',10);

ylabel('归一化后的上证指数','FontSize',10);

figure;

plot(a1,yn)

plot(a,b,'*');

title('上证指数预测收盘价格','FontSize',12);

xlabel('统计时间2014.9.1-2015.11.10','FontSize',10);

ylabel('上证指数','FontSize',10);

hold on

plot(a1,a2,'r+');

legend('实际值','r预测值');

echo off

pause 

clc

实现结果

在这里插入图片描述
在这里插入图片描述

数据集在我网盘,有需要请联系博主

猜你喜欢

转载自blog.csdn.net/weixin_32393347/article/details/85928797