小波神经网络的时间序列预测模型

一、小波变换

波变换主要通过伸缩和平移实现多尺度细化,突出所要处理的问题细节,有效提取局部信息。

将傅里叶变换中无限长的三角函数基换成了有限长的会衰减的小波基。
小波神经网络的时间序列预测模型_第1张图片
小波变换不仅可以知道信号的频率成分,还能知道各频率成分出现的时刻。

二、小波神经网络

小波神经网络是改进的BP网络,将原先的隐含层的Sigmiod激活函数替换为小波函数,其表达式为:
ψ ( x ) = c o s ( 1.75 x ) e − x 2 / 2 ψ(x)=cos(1.75x)e^{-x^{2}/2} ψ(x)=cos(1.75x)ex2/2

三、与BP神经网络相比

  • 相同:信号向前传播,误差反向椽笔
  • 不同:将原先的隐含层的Sigmiod激活函数替换为小波函数----Morlet小波

四、例子

1、wavenn.m文件

%% 该代码为基于小波神经网络的交通流预测代码
%
% 
% 
该案例作者申明:
1:本人长期驻扎在此板块里,对该案例提问,做到有问必答。本套书籍官方网站为:video.ourmatlab.com
2:点此从当当预定本书《Matlab神经网络30个案例分析》

3:此案例有配套的教学视频,视频下载方式video.ourmatlab.com/vbuy.html

4:此案例为原创案例,转载请注明出处(《Matlab神经网络30个案例分析》)。
5:若此案例碰巧与您的研究有关联,我们欢迎您提意见,要求等,我们考虑后可以加在案例里。
% %% 清空环境变量 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'; error=zeros(1,maxgen); %% 网络训练 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 %权值参数更新 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'; yuce=zeros(92,1); %网络预测 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('预测交通流量','实际交通流量','fontsize',12) xlabel('时间点') ylabel('交通流量') web browser www.matlabsky.com %% % %

Matlab神经网络30个案例分析

相关论坛:

《Matlab神经网络30个案例分析》官方网站:video.ourmatlab.com

Matlab技术论坛:www.matlabsky.com

Matlab函数百科:www.mfun.la

Matlab中文论坛:www.ilovematlab.com

%

2、mymorlet.m文件

function y=mymorlet(t)

y = exp(-(t.^2)/2) * cos(1.75*t);

3、d_mymorlet.m文件

function y=d_mymorlet(t)

y = -1.75*sin(1.75*t).*exp(-(t.^2)/2)-t* cos(1.75*t).*exp(-(t.^2)/2) ;

4、运行结果

小波神经网络的时间序列预测模型_第2张图片

你可能感兴趣的:(建模,神经网络,人工智能)