高维数组的转置使用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程序问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)