📄 question_a_bp.m
字号:
%建立BP神经网络
%P为输入矢量,即是股市点数的日期,以yyyymmdd形式作为一个数据
%T为目标矢量,即是当日的收盘点数
[pn,minp,maxp,tn,mint,maxt]=premnmx(P,T);
% 创建一个新的前向神经网络
net_1=newff([1,1429],[100,1],{'tansig','purelin'},'traingdm')
%设置训练参数
netbp.trainParam.lr=1.5; %设置学习率
net_1.trainParam.show=200;%每100步显示一次
net_1.trainParam.goal=1e-7;%训练目标,精度
net_1.trainParam.epochs=3000;%训练次数
net_1.trainParam.min_grad=1e-3;%最小性能梯度
net_1.trainParam.lr_inc=1.1; %将学习率增量因子设置为1.1
net_1.trainParam.lr_dec=1.1; %将学习率减量因子设置为0.8
%调用train算法训练
[net_1,tr]=train(net_1,pn,tn);
%对BP网络进行仿真
anewn=sim(net_1,pn);
%数据还原
anew=postmnmx(anewn,mint,maxt);
%anew与tn做图对比
subplot(1,2,1),plot(T),legend('真实数据',1)
hold,subplot(1,2,1),plot(anew,'r')
title('真实数据与模拟数据对比')
legend('真实数据','模拟数据',1)
%绘制误差
subplot(1,2,2)
plot(T-anew)
title('误差分析')
% 对新数据进行分析,记为pnew
pnewn=tramnmx(pnew,minp,maxp);
anewn=sim(net_1,pnewn); %对BP网络进行仿真
anew=postmnmx(anewn,mint,maxt);
plot(pnew)
hold
plot(tar)
% %日期数据转换
year=double(uint16(P/10000));
month=double(uint16((P-10000*year)/100));
day=P-10000*year-100*month;
P=(year-2005)*365+month*30+day-180;
%Change the order of P and T
[m,n]=size(P);
for i=1:n
Q(1,i)=P(1,n-i+1);
end
P=Q;
[m,n]=size(T);
for i=1:n
Q(1,i)=T(1,n-i+1);
end
T=Q;
%polyfit多项式拟合
A=polyfit(P,T,6);
Z=polyval(A,P);
plot(P,T,'k',P,Z,'r')
pp = polyder(A); % 对拟合得到的多项式求导,得到导函数pp
dy2 = polyval(pp,P) % 计算导函数pp在x的导数值
plot(P,dy2,'r')
% 三次样条插值方法
cs = csapi(P,T); % 生成三次样条插值函数cs
pp = fnder(cs); % 计算三次样条插值函数cs的导函数pp
dy3 = fnval(pp,P) % 计算导函数pp在x的导数值
plot(P,dy3,'k')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -