灰色预测总结
灰色系统建模
灰色系统理论在建模中的应用:灰色系统理论在建模中被广泛用来处理数据。与插值拟合相比,利用灰色模型处理数据不仅对数据没有很强的,而且精度更高,计算更简便。常用的灰色系统生成方式有: 累加生成,累减生成,均值生成,级比生成等,下面对这几种生成做简单介绍. 累加生成:
令x(0)为原始序列,x(0)[x(0)(1),x(0)(2),记生成数为x(1),x(1)[x(1)(1),x(1)(2),x(1)与x(0)之间满足如下关系:k,x(0)(n)],,x(1)(n)],如果
x(1)(k)x(0)(i);k1,2,,ni1(21)
则称为一次累加生成,记为1AGO
累加生成在灰色系统理论中有着非常重要的地位,它能使任意非负数列,摆动的或非摆动的,转化为非减的
累减生成:累减生成,即对数列求相邻两数据的差,累减生成是累加生成的逆运算,常简记为IAGO(Inver se Accumulated Generating Operation), 累减生成可将累加生成还原为非生成数列,在建模过程中用来获得增量信息,其运算符号为∆.
的,递增的数列.令x为r次生成数列,对x作i次累减生成记为(i),其基本关系式为:(0)[x(r)(k)]x(r)(k)(1)[x(r)(k)](0)[x(r)(k)](0)[x(r)(k1)](2)[x(r)(k)](1)[x(r)(k)](1)[x(r)(k1)][x(k)](i)(r)(i1)(r)(r)
(25)[x(k)](r)(i1)[x(k1)](r)
式中,(0)(0)为0次累减,即无累减;(1)(0)为1次累减,即k1与k时刻两个零次累减量求差,(i)(0)为i次累减,即k1与k时刻两个i1次累减量求差.
从式(25)还可得到以下关系:
(1)[x(r)(k)](0)[x(r)(k)](0)[x(r)(k1)]x(r)(k)x(r)(k1)xi1k(r1)(26)(i)(i)xi1k1(r1)x(r1)(k)[x(k)][x(k)][x(k1)]x(r1)(k)x(r1)(k1)x(r2)(i)x(r2)(i)i1i1kk1(2)(r)(1)(r)(1)(r)
(27)x(r2)(k)
同理可得:
[x(k)]x(i)(r)(ri)(k)(28)
(r)[x(r)(k)]x(0)(k)(29)
从(29)式可以看出,对r次生成数列作r次累减,即还原为非生成数列.事实上,累加中包含着累减,累减中包含着累加比如.:r1时,有
x(k)x(i)x(i)x(k)(1)(0)(0)(0)i1i1kk1x(k1)x(k)(0)(1)(1)(1)(0)(210)
x(k)x(k)x(k1)
进一步有x(r1)(k)x(r)(k)x(r)(k1)(211)
均值生成分为邻均值生成与非邻均值生成两种.
级比生成是一种常用的填补序列端点空穴的方法.对数列端点值的生成,我们无法采用均值生成填补空缺,只能采用级比生成.级比生成在建模中可以获得较好的灰指数律.级比生成是级比(k)与光滑比(k)生成的总称.设序列X(0)[x(0)(1),x(0)(2),,x(0)(n)]为原始序列,称(K)为级比,(k)为光滑比,其表达式为
(k)x(0)(k)/x(0)(k1)(k)x(0)(k)/x(1)(k1)设X(0)[(1),x(0)(2),(212)
,x(0)(n1),(n)]为端点是空穴的序列,若用(1)右邻的级比生成x(0)(1),用(n)的左邻级比生成x(0)(n),则称x(0)(1)和x(0)(n)为级比生成
GM(1.1)模型建模机理 GM(1.1)原理步骤 原始数列:
X(0)x(0)(1),x(0)(2),对X(0),x(0)(n)
进行一次累加,得到新数列:
,x(1)(n)X(1)x(1)(1),x(1)(2),其中,x(1)k
(k)x(i)i0
(0)x(k)的GM(1.1)白化形式的微分方程为: 于是
其中,a,u为待定系数,将(2-16)式离散化,即得:
dx(1)ax(1)udt(216)(217)
(1)(x(1)(k1))az(1)(x(k1))u(1)(1)(x(k1))为x(1)在(k+1)时刻的背景值 其中,
(1)(1)(1)(1)(0)(x(k1))x(k1)x(k)x(k1)因为:
(218)
z(1)(k1)1(1)(x(k1)x(1)(k))2(219)
将(2-18),(2-19)式代入(2-17)式,得
1(1)x(k1)a[(x(k)x(1)(k1))]u2(0)(220)
将(2-20)
1(1)(1)(x(1)x(2))1x(0)(2)2(0)1(1)(1)x(3)(x(2)x(3))12(0)x(n)1(1)(1)(x(n1)x(n))12(221)
1(1)(1)(x(1)x(2))12x(0)(2)(0)1(x(1)(2)x(1)(3))1x(3)令Y,B2(0)x(n)1(1)(1)(x(n1)x(n))12
[au]T为待辨识参数向量,则(2-21)可写成:
YB(222)
参数向量可用最小二乘法求取,即
ˆ[aˆ,uˆ]T(BTB)1BTY
把求取的参数代入(2-16)式,并求出其离散解
ˆˆuˆuˆ(1)(k1)[x(1)(1)]eakxˆˆaaˆ(0)(k1)xˆ(1)(k1)xˆ(1)(k)xˆˆuˆ(1ea)[x(1)(1)]eakˆa(224)
(225)
还原到原始数据得
(224),(225)式称为GM(1.1)模型的时间相应函数模型,它是GM(1.1)模型灰色预测的具体计算公式.
(GM1.1)模型的精度检验
模型选定之后,一定要经过检验才能判定其是否合理,只有通过检验的模型才能用来作预测,灰色模型的精度检验一般有三种方法:相对误差大小检验法,关联度检验法和后验差检验法.下面对这三种方法做个简单介绍.1 级比检验:
为了保证建模方法的可行性,需要对已知数据列做必要的检验处理。 原始数列:
X(0)x(0)(1),x(0)(2),级比表达式为:
,x(0)(n)
2 后验差检验法
ˆ(0)如(231)所示,残设按GM(1.1)建模法所求出的X差如(232)所示,原始序列X(0)及残差序列E的方差2分别为S12和S2,则
1n(0)S[x(k)x]2nk1211nS[e(k)e]2nk122(235)
1n(0)1n其中,xx(k),ee(k)nk1nk1
计算后验差比为:
CS2/S1计算小误差概率:
(236)
(237)pPe(k)e0.6745S1
指标C和p是后验差检验的两个重要指标.指标C越小越好,C越小表示S1大而S2越小.S1大表示原始数据方差大,即原始数据离散程度大.S2小表示残方差小,即残差离散程度小.C小就表明尽管原始数据很离散,而模型所得计算值与实际值之差并不太离散.
指标p越大越好,p越大,表明残差与残差平均值之差小于给定值0.67451的点较多,即拟合值(或预测值)分布比较均匀.按C,p两个指标,可综合评定预测模型的精度.模型的精度由后验差和小误差概率共同刻划.一般地,将模型的精度分为四级,见表2-1表21精度检验等级参照表
模型精度等级 1级(好) 2级(合格) 3级(勉强) 4级(不合格) 均方差比值C C<=0.35 0.35小误差概率p 0.95<=p 0.80<=p<0.95 0.70<=p<0.80 P<0.70 于是,模型的精度级别Maxp的级别,C的级别3 序列光滑度的理论分析定义3.1设序列X[x(1),x(2),,x(n)],Z是X的均值生成序列:Z[z(1),z(2),z(k)0.5z(k1),k1,2,若满足:(1)当k充分大时,x(k)1kn,z(n)],其中,z(k)0.5,n;X*是某一可导函数的
代表序列,我们将删去x(n1)后所得的序列仍记为X,k1i1x(i);
(2)maxx*(k)x(k)maxx*(k)z(k)1kn则称X为光滑序列,(1),(2)称为序列光滑条件.
设序列X(0)[x(0)(1),x(0)(2),称(k)x(0)(k),x(0)(n)],,n为序xi1k1(0)(i)x(0)(k)(1),k2,3,x(k1)列X(0)的光滑比.
光滑比从另一个侧面反映了序列的光滑性,即用序列k-1i=1中第k个数据x(k)与前k1个数据的和x(i)的比值(k)来考察序列X中数据变化是否平缓.显然,序列X中的数据变化越平稳,其光滑比(k)越小.
定义3.3设x(0)(k),k1,2,,n为非负数据序列,x(0)(k)0,k0,当kk0时,如果光滑比(k)x(0)(k)(1),则称x(0)(k),k1,2,x(k1)离散序列.定义3.4k2,3,若序列X(k)满足:(1)xi1k1(0)(i),n为光滑
(k1)1;(k),n;,n1;(2)(k)[0,];k2,3,(3)0.5则称X为准光滑序列.
定理3.1设x(0)(k),k1,2,,n为光滑离散序列的充是k的递减函数.(0)要条件是:光滑比(k)x(0)(k)xi1k1(i),n为光滑x(0)(k)(1),则称x(0)(k),k1,2,x(k1)离散序列.
提高数列的光滑度
1 基于函数lnx变换提高数据序列的光滑度
(1)(2)若x(0)(k)为递增序列,且x(0)(1)1,则lnx(0)(k)是光滑离散序列;若x(0)(k)为递增序列,且x(0)(1)e,则lnx(0)(k)x(0)(k)lnxi1k1(0)(i)xi1k1(0)(i)
由(2)知,变换序列lnx(0)(k)具有比原始序列x(0)(k)更好的光滑度
3)若x(0)(k)为递增序列,且x(0)(1)1,T1,则[lnx(0)(k)]1T1Tk1i1lnx(0)(k)[lnx更好的光滑度(0)(i)]lnxi11k1(0)(i)
由(3)知,变换序列[lnx(0)(k)]T具有比原始序列lnx(0)(k)
1(4)若x(0)(k)为递增序列,且x(0)(1)e,T1,则[lnx(k)]k1i1(0)(0)T1Tlnx(0)(k)[lnx(i)][lnx(0)(k)]1lnx(i)(0)i1k1x(0)(k)(0)x(i)i1k1T1T[lnxi1k1[x(0)(k)]1T1T(0)(i)][xi1k1x(0)(k)(0)(i)]xi1k1(0)(i)
2.基于函数xa(a0)变换提高光滑度的方法
(1)若x(0)(k)为递增序列,且x(0)(1)1,则[x(0)(k)]a(a0)是光滑离散序列;(2)若x(0)(k)为递增序列,且x(0)(1)1,T1,则对于a0有[x(0)(k)]ak1i1[lnx(0)(k)]1T1T[x(0)(i)]a[lnxi1k1lnx(0)(k)(0)(i)]lnxi1k1x(0)(k)(0)(i)xi1k1(0)(i)
1由(2)知,变换序列[x(0)(k)]a具有比原始序列[lnx(0)(k)]T更好的光滑度
在应用(2)时,应注意以下两点:
1.若(2)的条件x(0)(1)e或x(0)(1)不成立,可选择某个常数c, 使x(0)(1)x(0)(1)+ce(或1),最后再还原.rr
2.对(2)的a可根据实际情况定,一般情况下x(0)(k)越大,a取得越小.
3.基于函数ax(a)变换提高光滑度的方法
(1)若x(0)(k)为递增序列,且x(0)(1)1,则ax是光滑离散序列;(2)若x(0)(k)为递增序列,且x(0)(1)1,T1,则对于a1有ax(0)(0)(k)(a1)(k)ai1k1(0)[lnx(0)(k)]1T1Tx(i)[lnxi1(0)k1lnx(0)(k)(0)(i)]lnxi1k1x(0)(k)(0)(i)xi1k1(0)(i)
1由(2)知,变换序列ax好的光滑度(k)(a1)具有比序列[lnx(0)(k)]T更
4 灰色GM(1.1)优化模型分析传统GM(1.1)模型背景值对预测精度的影响
X0=x
%format long ; format short g; [m,n]=size(X0);
X1=cumsum(X0); %累加 X2=[]; for i=2:n
lamuda(i)=X0(i-1)/X0(i); end lamuda for i=1:n-1
X2(i,:)=X1(i)+X1(i+1); end for i=1:n-1
X2(i,:)=X1(i)+X1(i+1); end for i=2:n
sigema(i)=X0(i)/X1(i-1); end
sigema%sigema属于(1,1.5)时,则具有准指数规律,可建立预测模型幂函数变换、对数变换和复合变换 m=2/(n+1);
ep=[exp(-m) exp(m)]%级比检验lamuda(i)必须落到ep区间内 B=-0.5.*X2 ;
t=ones(n-1,1);
B=[B,t] ; % 求B矩阵 YN=X0(2:end) ;
Pt=YN./X1(1:(length(X0)-1)) %对原始数据序列X0进行准光滑性检验,Pt∈[0,ε]当ε<0.5 时, 则称 x(0)(t)为准光滑序列
%序列x0的光滑比P(t)=X0(t)/X1(t-1) A=inv(B.'*B)*B.'*YN.' ; a=A(1) u=A(2) c=u/a ; b=X0(1)-c ;
X=[num2str(b),'exp','(',num2str(-a),'k',')',num2str(c)];
strcat('X(k+1)=',X) %syms k; for t=1:length(X0) k(1,t)=t-1; end k
Y_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); end
yuce=[Y_k_1(1),Y] %预测值 CA=abs(yuce-X0) ; %残差数列
Theta=CA %残差检验 绝对误差序列 err= CA ./ X0 %相对误差序列如果err<0.2,则可认为达到一般要求,如果err<0.1,则认为达到较高的要求
AV=mean(CA); % 残差数列平均值
R_k=(min(Theta)+0.5*max(Theta))./(Theta+0.5*max(Theta)) ;% P=0.5
R=sum(R_k)/length(R_k) %关联度 Temp0=(CA-AV).^2 ;
Temp1=sum(Temp0)/length(CA);
S2=sqrt(Temp1) ; %绝对误差序列的标准差 %----------
AV_0=mean(X0); % 原始序列平均值 Temp_0=(X0-AV_0).^2 ;
Temp_1=sum(Temp_0)/length(CA);
S1=sqrt(Temp_1) ; %原始序列的标准差
TempC=S2/S1*100 %方差比?
C=strcat(num2str(TempC),'%')%方差比均方差比值 C 越小越好 ,C<0.35为好,C<0.5为合格 %---------- SS=0.675*S1 ; Delta=abs(CA-AV) ; TempN=find(Delta<=SS); N1=length(TempN); N2=length(CA); TempP=N1/N2*100;
P=strcat(num2str(TempP),'%') %后验差检验%计算小误差概率P>0.85为合格,P>0.95为好