Matlab小波神经网络(时间序列预测)

Matlab(小波神经网络时间序列预测)
时间序列数据:

公共号“数据统计分析与挖掘”中回复“数据”,获取本文所需数据。
公共号“数据统计分析与挖掘”中回复“书籍”,获取50本数据分析、python、统计学经典书籍。

扫描二维码,回复“数据,获取本文所需数据。

 

输入向量与输出向量的确定

输入向量:预测时间点的前4个数据

输出向量:预测时间点的数据

 

代码调试分析

%设置网络节点数

M = size(input,2);   %输入层节点数(input:N x M)

n = 6;                     %隐含层节点数

N = size(output,2); %输出层节点数(output:N x 1)

 

%设置网络权值初始化

Wjk = randn(n,M);Wjk_1 = Wjk;Wjk_2 = Wjk_1;     %输入层-隐含层权值

Wij = randn(N,n);Wij_1 = Wjk;Wij_2 = Wjk_1;     %隐含层-输出层权值

a = randn(1,n);a_1 = a;a_2 = a_1;                 %小波函数的平移因子

b = randn(1,n);b_1 = a;b_2 = b_1;                 %小波函数的伸缩因子

 

%权值学习增量初始化

d_Wjk=zeros(n,M);

d_Wij=zeros(N,n);

d_a=zeros(1,n);

d_b=zeros(1,n);

%设置学习率

lr1 = 0.01;

lr2 = 0.001;

time = 1000; %最大迭代次数

 

%数据归一化

[inputn,inputps] = mapminmax(input');      %归一化的数据格式:M x N

[outputn,outputps] = mapminmax(output');  %归一化的数据格式:1 x N

inputn = inputn';

outputn = outputn';

 

%节点初始化

y=zeros(1,N);

net=zeros(1,n);

net_ab=zeros(1,n);

 

%网络训练

for i=1:time

    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);

end

%网络预测

test = mapminmax('apply',input_test',inputps);

test = test';

for i=1:size(test,1)

    vec = test(i,:);

    for j=1:n

        for k=1:M

            net(j) = net(j)+Wjk(j,k)*vec(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,'-or')

hold on

plot(output_test,'b--')
————————————————
版权声明:本文为CSDN博主「codeQin」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42394743/article/details/81587756

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值