人工神经网络是根据人的认识过程而开发出的一种算法。假如我们现在只有一些输入和相应的输出,而对如何由输入得到输出的机理并不清楚,那么我们可以把输入与输出之间的未知过程看成是一个“网络”。
通过不断地给这个网络输入和相应的输出来“训练”这个网络,网络根据输入和输出不断地调节自己的各节点之间的权值来满足输入和输出。这样,当训练结束后,我们给定一个输入,网络便会根据自己已调节好的权值计算出一个输出。
神经网络被人们称为万金油,作为群智能算法,其功能确实很多,可以作预测、评价等,但其对数据量也有一定要求。
下面是MATLAB神经网络代码讲解:
clear
clc
A=[
]; %%%%%指标的训练集
B=[
]; %%%%%输出1个指标的训练集
x=A’;
y=B’;
testx = [
]’ %%%预测时需要的输入值
n=6 %%%%自变量的个数
m=1 %%%%因变量的个数
p=x; %将所有自变量合并得到输入数据矩阵
t=y; %将所有因变量合并目标数据矩阵
[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t); % 对于输入矩阵p和输出矩阵t进行归一化处理
u=ones(n,1);
dx=[-1u,1u]; %归一化处理后最小值为-1,最大值为1
%BP网络训练
net=newff(dx,[n,15,m],{‘tansig’,‘tansig’,‘purelin’},‘traingdx’); %建立模型,并用梯度下降法训练.
net.trainParam.show=1000; %1000轮回显示一次结果
net.trainParam.Lr=0.05; %学习速度为0.05
net.trainParam.epochs=50000; %最大训练轮回为50000次
net.trainParam.goal=0.65*10^(-3); %均方误差
net=train(net,pn,tn); %开始训练,其中pn,tn分别为输入输出样本
%利用原始数据对BP网络仿真
an=sim(net,pn); %用训练好的模型进行仿真
a=postmnmx(an,mint,maxt); % 把仿真得到的数据还原为原始的数
x=1:length(y);
yucey1=a(1,:); %%%% 指标A的预测值
figure ;
subplot(1,1,1);plot(x,y(1,:),‘r-o’,x,yucey1,‘b–+’) %绘制因指标A的对比图;
legend(‘银行综合值的预测值’,‘银行综合值实际值’);
xlabel(‘银行’);ylabel(‘银行综合值’);
% 当用训练好的网络对新数据pnew进行预测时,也应作相应的处理:
pnew=testx; %%输入自变量的参数,每一行表示一个自变量,列数表示预测的个数
pnewn=tramnmx(pnew,minp,maxp); %利用原始输入数据的归一化参数对新数据进行归一化;
anewn=sim(net,pnewn); %利用归一化后的数据进行仿真;
anew=postmnmx(anewn,mint,maxt) %把仿真得到的数据还原为原始的数量级;
Y1=anew(1,:); %%%因变量A的预测值
% 显示预测值
disp(’ 预测值:‘)
Y1’
神经网络算法可以输入多个指标,只需要几行代码就可以实现神经网络算法。