[已答复] NARX神经网络超前预测方法

[复制链接]
咬着糖糖拽天下 发表于 2016-6-17 12:39:16
%操作系统windows10
%matlab 2016a
%64位环境
%下面所取代码为UI模块的核心部分 预测方式仅供参考
%如果嫌代码过于抽象可以使用 help narxnet进行帮助,自行测试,探索
%数据模式为一个自变量,一个因变量
%一、预测期自变量x已知构建如下模型:

RefNARXNetExample_01.png
%输入与输出数据统统元胞化(函数cell2mat()可以把元胞数据转换为数值型)
[Xs,Xi,Ai,Ts] = preparets(net,inputs,{},targets);
net.trainFcn =xunlian;  %由UI模块进行选择训练方式 变量xunlian为字符接收矩阵变量
net = train(net,Xs,Ts,Xi,Ai);
yn=net(Xs,Xi);
targets=cell2mat(targets);
yn=cell2mat(yn);
%以下为超前预测模块
XI=Xs(:,length(Xs)-lag+1:end);
f_out=net([XK(1);{NaN}],XI);
for i=1:(YT-max(t));
    f_out(i)=net([XK(i);{NaN}],XI);
    ZH=[XK(i);f_out(i)];
    XI=[XI(:,2:end),ZH];
end
f_out=cell2mat(f_out);
YUCEK=f_out(end);





%数据模式为一个自变量,一个因变量
%一、预测期自变量x未知构建如下模型:
RefNARXNetExample_03.png
[Xs,Xi,Ai,Ts] = preparets(net,inputs,{},targets);
net.trainFcn =xunlian;  
net = train(net,Xs,Ts,Xi,Ai);
netp = removedelay(net);
view(netp);
[Xs,Xi]=preparets(netp,inputs,{},targets);
yn1=netp(Xs,Xi);由训练数据进行t期预测t+1期
yn=yn1;%保护yn1原始输出
yn(end)=[];
targets=cell2mat(targets);
yn=cell2mat(yn);
%超前预测模块如下
XS=Xs(:,end);
XI=Xs(:,end-1);
f_out=netp(XS,XI);
for i=1:(YT-max(t));
    f_out(i)=netp(XS,XI);
    XI=XS;
    XS=[XK(i);f_out(i)];
end
f_out=cell2mat(f_out);
YUCEK=f_out(end);
1.jpg 2.jpg 3.jpg
测试数据的预测期自变量并不完整,但是narxnet会采取nar网络进行一样的预测方式



4.jpg 5.jpg






file:///C:/Program%20Files/MATLAB/R2016a/help/examples/nnet/RefNARXNetExample_01.png

4 条回复


咬着糖糖拽天下 发表于 2016-6-17 12:42:01
narxnet 多元预测方式正在探索

ken92 发表于 2017-9-11 16:09:42
给楼主点赞!很棒的GUI,希望多元版本尽快出来

我乃高人 发表于 2021-4-7 11:14:11
咬着糖糖拽天下 发表于 2016-6-17 12:42
narxnet 多元预测方式正在探索

您好,您的帖子对我帮助很大。我有些问题想请教您。预测期自变量x已知的情况下进行超前预测,就像您写的这样。

%以下为超前预测模块
XI=Xs(:,length(Xs)-lag+1:end);
f_out=net([XK(1);{NaN}],XI);
for i=1:(YT-max(t));
    f_out(i)=net([XK(i);{NaN}],XI);
    ZH=[XK(i);f_out(i)];
    XI=[XI(:,2:end),ZH];
end
f_out=cell2mat(f_out);
YUCEK=f_out(end);

1. 这里边的Xs是已知的预测期自变量吗?是1行n列的向量吗?
2. 这里边的XK是代表什么?是什么格式?
3. YT是总的预测时长(标量)吗?

为什么我做的预测,f_out一直是NaN呢?我目前还没循环,只做一步的预测。这是我的代码:

%以下为超前预测模块(IrrZD_c为已知的预测期自变量,是1行n列的向量,输入延时是1:5)
lag=5;
XI=IrrZD_c(:,length(IrrZD_c)-lag+1:end);
XI = [tonndata(XI,true,false);{NaN,NaN,NaN,NaN,NaN}];
Xs = tonndata(IrrZD_c,true,false);
f_out=net([Xs(1);{NaN}],XI);

希望您方便的时候能帮我解答一下,谢谢啦~

李红光_Yr0PH 发表于 2021-11-20 11:27:07
我乃高人 发表于 2021-4-7 11:14
您好,您的帖子对我帮助很大。我有些问题想请教您。预测期自变量x已知的情况下进行超前预测,就像您写的 ...

解决了麽
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表