小波神经网络时间序列预测短时交通流量预测x
时间:2020-10-28 04:36:32 来源:勤学考试网 本文已影响 人
word
word 文档可编辑
%% 清空环境变量 clc clear %% 网络参数配置
load traffic_flux input output input_test output_test
M=size(input,2); % 输入节点个数
N=size(output,2); %输出节点个数
n=6; %隐形节点个数 lr1=0.01; % 学习概率 lr2=0.001; %学习概率 maxgen=100; %迭代次数
%权值初始化 Wjk=randn(n,M);Wjk_1=Wjk;Wjk_2=Wjk_1;
Wij=randn(N,n);Wij_1=Wij;Wij_2=Wij_1; a=randn(1,n);a_1=a;a_2=a_1; b=randn(1,n);b_1=b;b_2=b_1;
%节点初始化 y=zeros(1,N);
net=zeros(1,n); net_ab=zeros(1,n);
%权值学习增量初始化 d_Wjk=zeros(n,M); d_Wij=zeros(N,n); d_a=zeros(1,n);
d_b=zeros(1,n);
%% 输入输出数据归一化 [inputn,inputps]=mapminmax(input'); [outputn,outputps]=mapminmax(output'); inputn=inputn';
outputn=outputn';
%% 网络训练
for i=1:maxgen
%误差累计 error(i)=0;
% 循环训练
for kk=1:size(input,1) x=inputn(kk,:); yqw=outputn(kk,:);
for j=1:n
for k=1:M net(j)=net(j)+Wjk(j,k)*x(k); net_ab(j)=(net(j)-b(j))/a(j);
end temp=mymorlet(net_ab(j));
for k=1:N y=y+Wij(k,j)*temp; %小波函数
end
end
%计算误差和 error(i)=error(i)+sum(abs(yqw-y));
%权值调整
for j=1:n
%计算 d_Wij temp=mymorlet(net_ab(j));
for k=1:N
d_Wij(k,j)=d_Wij(k,j)-(yqw(k)-y(k))*temp;
end
%计算 d_Wjk temp=d_mymorlet(net_ab(j));
for k=1:M
for l=1:N d_Wjk(j,k)=d_Wjk(j,k)+(yqw(l)-y(l))*Wij(l,j) ;
end
d_Wjk(j,k)=-d_Wjk(j,k)*temp*x(k)/a(j);
end
%计算 d_b
for k=1:N
d_b(j)=d_b(j)+(yqw(k)-y(k))*Wij(k,j);
end
d_b(j)=d_b(j)*temp/a(j);
%计算 d_a
for k=1:N
d_a(j)=d_a(j)+(yqw(k)-y(k))*Wij(k,j);
end d_a(j)=d_a(j)*temp*((net(j)-b(j))/b(j))/a(j);
end
word 文档可编辑
%权值参数更新
Wij=Wij-lr1*d_Wij;
Wjk=Wjk-lr1*d_Wjk;
b=b-lr2*d_b;
a=a-lr2*d_a;
d_Wjk=zeros(n,M);
d_Wij=zeros(N,n);
d_a=zeros(1,n);
d_b=zeros(1,n);
y=zeros(1,N);
net=zeros(1,n);
net_ab=zeros(1,n);
Wjk_1=Wjk;Wjk_2=Wjk_1;
Wij_1=Wij;Wij_2=Wij_1;
a_1=a;a_2=a_1;
b_1=b;b_2=b_1;
end
end
%% 网络预测
%预测输入归一化 x=mapminmax('apply',input_test',inputps); x=x';
%网络预测
for i=1:92
x_test=x(i,:);
for j=1:1:n
for k=1:1:M
net(j)=net(j)+Wjk(j,k)*x_test(k); net_ab(j)=(net(j)-b(j))/a(j);
end
temp=mymorlet(net_ab(j));
for k=1:N y(k)=y(k)+Wij(k,j)*temp ;
end
end
yuce(i)=y(k); y=zeros(1,N);
net=zeros(1,n); net_ab=zeros(1,n);
end %预测输出反归一化 ynn=mapminmax('reverse',yuce,outputps);
%% 结果分析 figure(1) plot(ynn,'r*:') hold on plot(output_test,'bo--') title(' 预测交通流量 ','fontsize',12)
legend(预测交通流量','实际交通流量') xlabel('时间点') ylabel('交通流量')
word
word 文档可编辑
%这里面用到的两个子程序分别是:
function y=mymorlet(t) y = exp(-(t42)/2) * cos(1.75*t);
function y=d_mymorlet(t)
y = -1.75*si n(1.75*t).*exp(-(t42)/2)-t* cos(1.75*t).*exp(-(t.A2)/2);