realhappy 发表于 2006-9-21 18:31

神经网络进行时间序列多步预测

这是一个bp神经网络对时间序列进行单步预测,如果进行多步预测,程序该怎么循环呢,请朋友指点一下。

clc
clear
close all
load mackeyclass.dat
t=mackeyclass(:,1);
a=mackeyclass(:,2);
%---------------------------------------------------
% 产生训练样本与测试样本

n1 = t(1:2:200)';
x1 = a(1:2:200)';

n2 = t(2:2:200)';
x2 = a(2:2:200)';

xn_train = n1;          % 训练样本,每一列为一个样本
dn_train = x1;          % 训练目标,行向量

xn_test = n2;         % 测试样本,每一列为一个样本
dn_test = x2;         % 测试目标,行向量

%---------------------------------------------------
% 函数接口赋值

NodeNum = 20;         % 隐层节点数
TypeNum = 1;            % 输出维数
p1 = xn_train;          % 训练输入
t1 = dn_train;          % 训练输出
Epochs = 1000;          % 训练次数

P = xn_test;            % 测试输入
T = dn_test;            % 测试输出(真实值)

%---------------------------------------------------
% 设置网络参数

TF1 = 'logsig';TF2 = 'purelin';
net = newff(minmax(p1),,{TF1 TF2},'trainlm');

net.trainParam.epochs = Epochs;   % 最大训练次数
net.trainParam.goal = 1e-8;         % 最小均方误差
net.trainParam.min_grad = 1e-20;    % 最小梯度
net.trainParam.show = 200;          % 训练显示间隔
net.trainParam.time = inf;          % 最大训练时间

%---------------------------------------------------
% 训练与测试

net = train(net,p1,t1);   % 训练
X = sim(net,P);             % 测试 - 输出为预测值

%---------------------------------------------------
% 结果作图

plot(1:length(n2),x2,'r+:',1:length(n2),X,'bo:')
title('+为真实值,o为预测值')

realhappy 发表于 2006-9-22 10:26

请用神经网络做过时间序列的帮帮忙!

mongolism 发表于 2008-1-20 17:47

这个其实不是很难,你现在的预测是一步预测,也就是一个输入对应一个输出,一个p,对应一个t,例如p1-t1,p2-t2,你现在要做多步预测,那就是外差预测了,效果不会太好,但是只要步数不多,还是可以做的,输入不变,例如还是p1,输出就是t1,t2,t3(假设是3步预测),这是一组训练数据,第二组训练数据就是输入p1,输出t2,t3,t4,以此类推,主要是修改程序的输出层。不知道我的回答是否能解答你的问题,你给个邮箱,我可以发点资料给你

简爱 发表于 2008-1-23 21:09

拜托大家

[ 本帖最后由 sigma665 于 2008-1-23 21:37 编辑 ]

aliu 发表于 2012-4-25 15:26

回复 3 # mongolism 的帖子

我想要这方面的资料,就是多步预测的,这位朋友又的话,给我传些,谢谢。邮箱xincunaliu@sina.com
页: [1]
查看完整版本: 神经网络进行时间序列多步预测