大家好,我是带我去滑雪!
小波神经网络(Wavelet Neural Network,WNN)结合了小波变换和神经网络的特性,是一种在信号处理和模式识别领域应用广泛的神经网络模型。它的设计灵感来自于小波变换的多尺度分析特性和神经网络的非线性映射能力,通过将小波变换与神经网络结合,旨在更好地处理复杂的信号和数据。小波变换是一种数学工具,用于将信号分解为不同尺度的成分。小波变换的多尺度分析能力使得小波神经网络能够更好地捕捉信号的局部特征。小波神经网络的基础是神经元和神经网络的结构。神经元的激活函数通常采用小波函数,以利用小波的局部特性。
本期将利用小波神经网络实现短时交通流量预测。
目录
一、问题背景与模型建立
(1)小波理论
(2)小波神经网络
(3)数据
二、代码实现与结果分析
(1)小波神经网络初始化
(2)小波神经网络训练
(3)小波函数及小波函数偏导数
(4) 小波神经网络预测
(5) 结果分析
小波分析是针对傅里叶变换的不足发展而来的。傅里叶变换是信号处理领域中应用最广泛的一种分析手段,然而它有一个严重的不足,就是变换时抛弃了时间信息,通过变换结果无法判断某个信号发生的时间,即傅里叶变换在时域中没有分辨能力。小波是一种长度有限、平均值为0的波形,它的特点包括:时域都具有紧支集或近似紧支集;直流分量为0。小波函数是由一个母小波函数经过平移与尺寸伸缩得到,小波分析把信号分解成一系列小波函数的叠加。
小波神经网络的基础是神经元和神经网络的结构。神经元的激活函数通常采用小波函数,以利用小波的局部特性。小波神经网络权值参数修正算法类似于BP神经网络权值修正算法,采用梯度修正法修正网络的权值和小波基函数参数,从而使小波神经网络预测输出不断逼近期望输出。小波神经网络算法训练步骤如下:
小波神经网络(Wavelet Neural Network,WNN)的训练步骤通常包括以下几个关键步骤:
首先采集4天的交通流量数据,每隔15分钟记录一次该段时间内的交通流量,一共记录384个时间点的数据,用3天共288个交通流量的数据训练小波神经网络,最后用训练好的小波神经网络预测第4天的交通流量。
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
%权值参数更新
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
function y=mymorlet(t)
y = exp(-(t.^2)/2) * cos(1.75*t);
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) ;
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('交通流量')
小波神经网络预测与实际情况比较图:
通过图像可以发现,小波神经网络能够比较精确地预测短时交通流量,网络预测值接近期望值。
若有问题可邮箱联系:[email protected]
博主的WeChat:TCB1736732074
更多优质内容持续发布中,请移步主页查看。
点赞+关注,下次不迷路!