matlab如何进行数据的预测

matlab如何进行数据的预测,第1张

高维数组的转置使用permute函数

具体调用语法

B = permute(A,order)

按照向量order指定的顺序重排A的各维。B中元素和A中元素完全相同。但由于经过重新排列,在A、B访问同一个元素使用的下标就不一样了。order中的元素必须各不相同。

例子

>> A=rand(4,5,6);

>> size(A)

ans =

4 5 6

>> B = permute(A,[2 1 3]);

>> size(B)

ans =

5 4 6

原来A是4x5x6的矩阵

按照顺序[2 1 3]转置之后,原来的第一,第二维顺序改变

B的大小是5x4x6

示例程序见附件,其为一个简单的时间序列预测算例。其实所有的预测问题,本质都是一样的,通过对样本的学习,将网络训练成一个能反映时间序列内部非线性规律的系统,最终应用于预测。

BP(Back Propagation)神经网络是86年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用最速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。BP神经网络模型拓扑结构包括输入层(input)、隐层(hidden layer)和输出层(output layer)。

Matlab神经网络工具箱提供了一系列用于建立和训练bp神经网络模型的函数命令,很难一时讲全。下面仅以一个例子列举部分函数的部分用法。更多的函数和用法请仔细查阅Neural Network Toolbox的帮助文档。 例子:利用bp神经网络模型建立z=sin(x+y)的模型并检验效果 %第1步。随机生成200个采样点用于训练 x=unifrnd(-5,5,1,200); y=unifrnd(-5,5,1,200); z=sin(x+y); %第2步。建立神经网络模型。其中参数一是输入数据的范围,参数二是各层神经元数量,参数三是各层传递函数类型。 N=newff([-5 5;-5 5],[5,5,1],{'tansig','tansig','purelin'}); %第3步。训练。这里用批训练函数train。也可用adapt函数进行增长训练。 N=train(N,[x;y],z); %第4步。检验训练成果。 [X,Y]=meshgrid(linspace(-5,5)); Z=sim(N,[X(:),Y(:)]'); figure mesh(X,Y,reshape(Z,100,100)); hold on; plot3(x,y,z,'')

%由于数据比较大,我又懒得用归一化,所以直接把数据降了3个数量级,

%不过我觉得应该没问题,但用归一化结果应该更准确些。。

%由于初始权值和阀值均是随机给的,所以每次仿真都有点点不同,这是正常的。

p=[1183 1303 1278;1303 1278 1284;1278 1284 1187 ;

1284 1187 1154;1187 1154 1267;1154 1267 1241;

1267 1241 1302;1241 1302 1195;1302 1195 1256]'0001;

t=[ 1284 1187 1154 1267 1241 1302 1195 1256 1348]0001;

net=newff(minmax(p),[3,1],{'tansig','purelin'},'traingda');

nettrainParamgoal=0001;

nettrainParamshow=20;

nettrainParamepochs=1000;

nettrainParammin_grad=1e-10;

nettrainParammc=095;

[net,tr]=train(net,p,t);

t1=sim(net,[1302 1195 1256]'0001);

t2013=t11000%2013 的 预测 数据

运行结果:

t2013 =

13019

这是我曾经写过的一个灰色预测的程序:第一个文件为函数,需要在调用时输入原始数据x0和预测周期T, 第二个文件用于计算灰色关联度,使用时直接修改相关参数和原始数据。

--------------------------------------------------------------------------

第一个文件(用于灰色建模):grymdlm

--------------------------------------------------------------------------

function GM=grymdl(x0,T)

% 输入原始数据x0

% T为从最后一个历史数据算起的第T时点

x1=zeros(1,length(x0));B=zeros(length(x0)-1,2);

yn=zeros(length(x0)-1,1);Hatx0=zeros(1,length(x0)+T);

Hatx00=zeros(1,length(x0));Hatx1=zeros(1,length(x0)+T);

epsilon=zeros(length(x0),1);omega=zeros(length(x0),1);

for i=1:length(x0)

    for j=1:i

        x1(i)=x1(i)+x0(j);

    end

end

for i=1:length(x0)-1

    B(i,1)=(-1/2)(x1(i)+x1(i+1));

    B(i,2)=1;

    yn(i)=x0(i+1);

end

HatA=(inv(B'B))B'yn; %GM(1,1)模型参数估计

for k=1:length(x0)+T

    Hatx1(k)=(x0(1)-HatA(2)/HatA(1))exp(-HatA(1)(k-1))+HatA(2)/HatA(1);

end

Hatx0(1)=Hatx1(1);

for k=2:length(x0)+T

    Hatx0(k)=Hatx1(k)-Hatx1(k-1);%累计还原得到历史数据的模拟值

end

for i=1:length(x0) %开始模型检验

    epsilon(i)=x0(i)-Hatx0(i);

    omega(i)=(epsilon(i)/x0(i))100;

end

x0;

HatA;

Hatx0;

epsilon;

omega;

c=std(epsilon)/std(x0);

p=0;

for i=1:length(x0)

    if abs(epsilon(i)-mean(epsilon))<06745std(x0)

        p=p+1;

    end

end

p=p/length(x0);

if p>=095

    M1=1;

elseif p>=08

    M1=2;

elseif p>=07

    M1=3;

else

    M1=4;

end

if c<=035

    M2=1;

elseif c<=05

    M2=2;

elseif c<=065

    M2=3;

else

    M2=4;

end

M=max(M1,M2);

if M==1

    disp('The model is good,and the forecast is:'),

    disp(Hatx0(length(x0)+T))

elseif M==2

    disp('The model is eligibility,and the forecast is:'),

    disp(Hatx0(length(x0)+T))

elseif M==3

    disp('The model is not good,and the forecast is:'),

    disp(Hatx0(length(x0)+T))

else

    disp('The model is bad and try again')

    disp(Hatx0(length(x0)+T))

end

for i=1:length(x0)

    Hatx00(i)=Hatx0(i);

end

z=1:length(x0);

plot(z,x0,'-',z,Hatx00,':') %将原始数据和模拟值画在一个图上帮助观察

text(2,x0(2),'History data: real line')

text(length(x0)/2,Hatx00(length(x0))/2,'Simulation data:broken line')

GM=Hatx0(length(x0)+T);

--------------------------------------------------------------------------------

第二个文件(用于计算灰色关联度):grydgrm

--------------------------------------------------------------------------------

x=[264,4083,5,185,27,49;

    3256,5036,65,238,349,597;

    4116,6366,79,306,45,683;

    5182,8015,96,3943,6076,821;

    7058,10916,113,521,818,978;

    11147,13612,15,7392,11812,123;

    12716,1667,18,11817,18451,1675;

    16599,19691,2066,15665,24083,2149;

    24676,25756,2415,2183,3334,271]; %原始数据

delta=zeros(size(x,1),size(x,2)-1); %初始化绝对差

yita=zeros(size(delta,1),size(delta,2)); %初始化关联系数

for i=1:size(x,2)

    x(:,i)=x(:,i)/x(1,i);  %无量纲化处理

end

for i=1:(size(x,2)-1)

    delta(:,i)=abs(x(:,1)-x(:,i+1));  %求解delta

end

delta_min=min(min(delta,[],1)); %求解最小二级差

delta_max=max(max(delta,[],1)); %求解最大二级差

rou=05; %设定分辨系数为05

for i=1:size(delta,1)

    for j=1:size(delta,2)

        yita(i,j)=(delta_min+roudelta_max)/(delta(i,j)+roudelta_max); %计算关联系数

    end

end

r=sum(yita)/size(yita,1); %计算灰色关联

function GM1_1(X0)%format long ;[m,n]=size(X0); X1=cumsum(X0); %累加 X2=[];for i=1:n-1X2(imkc:)=X1(i)+X1(i+1);endB=-0.5.*X2 ;t=ones(n-11);B=[B,t];% 求B矩阵YN=X0(2:end);P_t=YN.&#47;X1(1:(length(X0)-1)) %对原始数据序列X0进行准光滑性检验,%序列x0的光滑比P(t)=X0(t)&#47;X1(t-1)A=inv(B.&#39;*B)*B.&#39;*YN.&#39; ;a=A(1) u=A(2) c=u&#47;a;b=X0(1)-c ; X=[num2str(b),&#39;exp&#39;,&#39;(&#39;,num2str(-a),&#39;k&#39;,&#39;)&#39;gkosnum2str(c)]; strcat(&#39;X(k+1)=&#39;,X) %syms k; for t=1:length(X0) k(1,t)=t-1; end kY_k_1=b*exp(-a*k)+c;for j=1:length(k)-1 Y(1,j)=Y_k_1(j+1)-Y_k_1(j);endXY=[Y_k_1(1),Y]%预测值CA=abs(XY-X0) ;%残差数列Theta=CA %残差检验 绝对误差序列XD_Theta= CA .&#47; X0 %残差检验 相对误差序列AV=mean(CA); % 残差数列平均值 R_k=(min(Theta)+0.5*max(Theta)).&#47;(Theta+0.5*max(Theta)) ;% P=0.5R=sum(R_k)&#47;length(R_k)%关联度Temp0=(CA-AV).^2 ;Temp1=sum(Temp0)&#47;length(CA);S2=sqrt(Temp1) ;%绝对误差序列的标准差%----------AV_0=mean(X0); % 原始序列平均值Temp_0=(X0-AV_0).^2 ;Temp_1=sum(Temp_0)&#47;length(CA);S1=sqrt(Temp_1) ; %原始序列的标准差TempC=S2&#47;S1*100;%方差比C=strcat(num2str(TempC),&#39;%&#39;) %后验差检验%方差比%----------SS=0.675*S1 ;Delta=abs(CA-AV) ;TempN=find(Delta&lt;=SS);N1=length(TempN);N2=length(CA);TempP=N1&#47;N2*100;P=strcat(num2str(TempP),&#39;%&#39;) %后验差检验%计算小误差概率 调用例子:X0=[2.874,3.278,3.337,3.39,3.679];GM1_1(X0)

参考资料:

我自己想的,算法不是很优,希望你自己改进吧...余下全文>>

BP网络训练图:

P = [1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009];%输入向量

T = [1154 2121 2597 2518 352 4634 509 558 614 700 696 712];%期望输出

Z=[2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020]

%创建两层的BP网络:

net = newff([1998 2009],[100 1],{'tansig' 'purelin'});

nettrainparamshow=50;

%每次循环50次

nettrainParamepochs = 500;

%最大循环500次

net = train(net,P,T);

%对网络进行反复训练

只给出了一部分程序,其余的QQ传给你,留你的QQ。

结果:

Y =

Columns 1 through 7

1154067 2120911 2597029 2517979 3520027 4634023 5089910

Columns 8 through 12

5580155 6139892 6999980 6960063 7119970

预测值a =

Columns 1 through 7

7119970 7117126 7494216 7492672 7467096 7467096 7510786

Columns 8 through 11

7602729 7573316 6965151 6965151

分别是2010-2020年的预测数据。

以上就是关于matlab如何进行数据的预测全部的内容,包括:matlab如何进行数据的预测、用MATLAB的BP神经网络时间序列预测编程、GA-BP神经网络模型预测的MATLAB程序问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10207355.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存