学习-小波神经网络的时间序列预测-短时交通流量预测

小波理论

    小波分析是针对傅里叶变换的不足发展而来的,傅里叶是信号处理领域中应用极广的一种分析手段,但其缺点为变换时抛弃了时间信息,即,无法判断某个信号发生的时间(在时域中没有分辨能力)。
    小波(长度有限、平均值为0)的特点:
            1.时域都具有紧支集或近似紧支集;
            2.直流分量为0;
    紧支集(粗略解释):使函数只在有限的区间上的值不为零,在有限的区间外恒等于0或很快趋近于0,这就叫紧支集的函数。紧支性越强,小波函数衰减的越快,直观表现就是这个小波函数在横轴上占的宽度越窄。紧支性越强的小波基局部性越好,越能检测信号中微小的信息。
    直流分量:引申到信号中可理解为平均值。
    小波分析:即把信号分解为一系列小波函数的叠加。能够通过小波基函数的变换分析信号的局部特征,并在二维情况下具有信号方向选择性能力。
    ![小波变换公式](https://img-blog.csdn.net/20170828020530339?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvV2VpemhpeXVhbjM3OTI3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

小波神经网络

:以BP神经网络拓扑结构为基础,把小波基函数作为隐含层节点的传递函数,信号前向传播的同时误差反向传播的神经网络。
小波神经网络拓扑结构
隐含层输出:隐含层计算公式
输出层:输出层计算公式
小波神经权值参数修正算法类似于BP网络,采用梯度修正法,在此略过公式。
小波神经网络-训练步骤(与BP类似):
1)网络初始化
2)样本分类
3)预测输出
4)权值参数修正
5)判断算法结束条件


案例

交通流量预测
长期交通流量预测是宏观意义上的预测;短期交通流量预测是微观意义上的预测,是智能运输系统的核心内容,具有高度非线性和不确定性等特点,并且与时间相关性较强,可看做是时间序列预测问题,比较常用的方法包括多元线性回归预测、AR模型预测、ARMA模型预测、指数平滑预测等。
模型建立:
研究表明,城市交流路网中交通路段上某时刻的交通量与本路段前几个时段的交通流量有关,并且交通流量具有24小时内准周期的特性。
设计小波神经网络,输入层输入为当前时间点的前n个时间点的交通流量;隐含层节点由小波函数构成;输出层输出当前时间点的预测交通流量。本案例采用4-6-1结构。
首先采集交通流量数据:本案例中采集4天的数据,每个15分钟记录一次该段时间内的交通流量,一共记录4*24*4=384个时间点的数据。用前三天的数据(288个)训练网络,最后用训练好的网络预测第四天的流量,并对预测结果进行分析。
编程实现:
1)初始化:
网络权值和小波基函数在参数初始化时随机得到。
一些代码会选择性省略(如下载数据)

%网络结果初始化
M=4;
n=6;
N=1

%权值和参数学习率
lr1=0.01;
lr2=0.001;
maxgen=100;%迭代学习次数

%网络权值初始化
wjk=randn(n,M);
wij=randn(N,n);
a=randn(1,n);
b=randn(1,n);

%权值学习增量初始化
d_wjk=zeros(n,M);
d_wij=zeros(N,n);
d_a=zeros(1,n);
d_b=zeros(1,n);

%训练数据归一化
[input,inputps]=mapminmax(input');
[outputn,outputps]=mapminmax(output');
inputn=inputn';
outputn=outputn';
2)网络训练:
%网络训练
for i=1:maxgen
    error(i)=0; %记录每次误差
    %网络预测
    for kk=1:size(input,1)
    %提取输入输出数据
    x=inputn(kk,:);
    yqw=outputn(ll,:);
%网络预测输出
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=nymorlet(net_ab(j));
    for k=1:N
        y(k)=y(k)+wij(k,j)*temp;
    end
end

其中

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

function y=d_nymorlet(t)
y=-1.75*sin(1.75*t).*exp(-(t.^2)/2)-t*cos(1.75*t).*exp(-(t.^2)/2);
3)网络预测

for i=1:92
x_test=x(i,:);
for j=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

4)结果分析
略

猜你喜欢

转载自blog.csdn.net/Weizhiyuan37927/article/details/77627904
今日推荐