├── README.md └── bp.m /README.md: -------------------------------------------------------------------------------- 1 | # BP算法简介 2 | BP神经网络是经典的神经网络。在中国上证指数收到很多的音素的影响,在理想的情况下,对个股音素分别标记样本,是可以对上证指数进行模拟和运算的。 3 | 4 | blog(博客) : https://errol.blog.csdn.net/ 5 | 6 | # 详细请参考本文的论文:《基于自适应BP神经网络的上证指数预测模型的研究》 7 | [论文地址](https://kns.cnki.net/KCMS/detail/detail.aspx?dbcode=CJFQ&dbname=CJFDLAST2016&filename=CDXB201606005&v=MTkyMTZZWVI4ZVgxTHV4WVM3RGgxVDNxVHJXTTFGckNVUkxPZlkrZHZGQ3JrVnIzQUppblRiTEc0SDlmTXFZOUY=) 8 | 9 | # DataSet在自己的网盘,有需要的可以自己去下载。 10 | 11 | # 结果显示 12 | ![ 预测结果和模拟结果](https://ws4.sinaimg.cn/large/006tNc79gy1g1xxe19sk8j30bv07x0sx.jpg) 13 | ![预测结果](https://ws1.sinaimg.cn/large/006tNc79gy1g1xxfppa2kj309u07tq31.jpg) 14 | -------------------------------------------------------------------------------- /bp.m: -------------------------------------------------------------------------------- 1 | %bp.m​ 2 | 3 | %处理数据 4 | 5 | clear 6 | 7 | close all 8 | 9 | echo on %窗口响应执行过程 10 | 11 | clc 12 | 13 | pause 14 | 15 | a=xlsread('learn.xls',1,'A2:A301');%样本时间序号 16 | 17 | a1=xlsread('learn.xls',1,'A7:A301');%预测时间序号 18 | 19 | b=xlsread('learn.xls',1,'C2:C301');%读取指数 20 | 21 | for i=1:1:295 22 | 23 | y(i)=b(i+5);%理想输出 24 | 25 | end 26 | 27 | for i=1:1:295 28 | 29 | for j=1:1:5 30 | 31 | x(j,i)=b(i+j-1);%输入 32 | 33 | end 34 | 35 | end 36 | 37 | a 38 | 39 | x %以前五日预测明天的大盘指数的输入矩阵 40 | 41 | y %理想的输出 42 | 43 | %pause 44 | 45 | [xn,minx,maxx,yn,miny,maxy]=premnmx(x,y) %数据归一化处理 46 | 47 | xn 48 | 49 | yn 50 | 51 | %pause 52 | 53 | tic; 54 | 55 | %建立神经网络 56 | 57 | net=newff(minmax(xn),[11,1],{'tansig','purelin'},'trainlm'); 58 | 59 | net.trainparam.show=50; %显示迭代过程 60 | 61 | net.trainparam.lr=0.5; %学习率 62 | 63 | net.trainparam.epochs=1000; %最大训练次数 64 | 65 | net.trainparam.goal=1e-3; %训练要求精度 66 | 67 | net.trainparam.mc=0; %动量因子 68 | 69 | [net,tr]=train(net ,xn,yn); %训练bp网络 70 | 71 | t = toc; 72 | 73 | t 74 | 75 | pause 76 | 77 | inputWeights=net.iw{1,1} %输入层权值 78 | 79 | inputbias=net.b{1} %输入层阈值 80 | 81 | layerWeights=net.lw{2,1} %输出层权值 82 | 83 | layerbias=net.b{2} %输出层阈值 84 | 85 | %对网络仿真预测 86 | 87 | On = sim (net ,xn); 88 | 89 | E=On-yn %计算误差 90 | 91 | M=sse(E) 92 | 93 | N=mse(E) 94 | 95 | %pause 96 | 97 | 98 | 99 | a2=postmnmx(On,miny,maxy) 100 | 101 | plot(a1,xn) 102 | 103 | title('归一化处理后的样本','FontSize',12); 104 | 105 | xlabel('统计时间2014.9.6-2015.11.10','FontSize',10); 106 | 107 | ylabel('归一化后的上证指数','FontSize',10); 108 | 109 | figure; 110 | 111 | plot(a1,yn) 112 | 113 | plot(a,b,'*'); 114 | 115 | title('上证指数预测收盘价格','FontSize',12); 116 | 117 | xlabel('统计时间2014.9.1-2015.11.10','FontSize',10); 118 | 119 | ylabel('上证指数','FontSize',10); 120 | 121 | hold on 122 | 123 | plot(a1,a2,'r+'); 124 | 125 | legend('实际值','r预测值'); 126 | 127 | echo off 128 | 129 | pause 130 | 131 | clc 132 | --------------------------------------------------------------------------------