https://i.loli.net/2019/07/25/5d39b5315c60935716.jpg

灰色预测模型

灰色预测模型

灰色预测的概念

灰色系统的应用范畴大致分为以下几方面:

  • 灰色关联分析。
  • 灰色预测:人口预测;灾变预测…
  • 灰色决策。
  • 灰色预测控制

灰色系统:系统内一部分信息已知,另一部分信息未知,系统内各因素间有不确定的关系。

灰色预测法:

  • 灰色预测法是一种对含有不确定因素的系统进行预测的方法。
  • 灰色预测是对既含有已知信息又含有不确定信息的系统进行预测,就是对在一定范围内变化的、与时间有关的灰色过程进行预测。

灰色预测通过鉴别系统因素之间发展趋势的相异程度,即进行关联分析,并可对原始数据进行生成处理来寻找变动的规律,生成有较强规律性的数据排列,然后建立相应的微分方程模型,从而预测事物未来发展趋势的状况。

灰色预测法用等时距观测到的反映预测对象特征的一系列数量值构造灰色预测模型,预测未来某一时刻的特征量,或打到某一特征量的时间。


灰色预测的四种常见类型:

灰色时间序列预测

​ 即用观察到的反映预测对象特征的时间序列来构造灰色预测模型,预测未来某一时刻的特征量,后达到某一特征量的时间。

畸变预测

​ 即通过灰色预测模型预测异常值出现的时刻,预测异常值什么时候出现在特定时区内。

系统预测

​ 通过对系统行为特征指标建立一组相互关联的灰色预测模型,预测系统中众多变量间相互协调关系的变化。

拓扑预测

​ 将原始数据做曲线,在曲线上按定值寻找该定值发生的所有时点,并以该定值为框架构成时点数列,然后建立模型预测该定值所发生的时点。


灰色关联度与优势分析

灰色关联度

选取参考数列

\[X_{0}=\left\{X_{0}(k) \mid k=1,2, \cdots, n\right\}=\left(X_{0}(1), X_{0}(2), \cdots, X_{0}(n)\right) \]

其中k表示时刻。

假设有m个比较数列

\[X_{i}=\left\{X_{i}(k) \mid k=1,2, \cdots, n\right\}=\left(X_{i}(1), X_{i}(2), \cdots, X_{i}(n)\right)\\\quad(i=1,2, \cdots, m) \]

则称

\[\zeta_{i}(k)=\frac{\min _{i} \min _{k}\left|X_{0}(k)-X_{i}(k)\right|+\rho \max _{i} \max _{k}\left|X_{0}(k)-X_{i}(k)\right|}{\left|X_{0}(k)-X_{i}(k)\right|+\rho \max _{i} \max _{k}\left|X_{0}(k)-X_{i}(k)\right|} \]

为比较数列Xi对参考数列X0在k时刻的关联系数其中\(\rho \in[0,+\infty)\)为分辨系数。一般来讲,分辨系数\(\rho \in[0,1]\),由(3)式容易看出,\(\rho\)越大,分辨率越大;\(\rho\)越小,分辨率越小。

式(1)定义的关联系数是描述比较数列与参考数列在某时刻关联程度的一种指标,由于各个时刻都有一个关联系数,因此信息显得过于分散,不便于比较,为此我们给出

\[r_{i}=\frac{1}{n} \sum_{k=1}^{n} \zeta_{i}(k) \]

为比较数列Xi对参考数列X0关联度

应该指出的是,公式(3)中的\(\left|X_{0}(k)-X_{i}(k)\right|\)不能区别因素关联是正关联还是负关联,可采取下面办法解决这个问题。记

\[\sigma_{i}=\sum_{k=1}^{n} k X_{i}(k)-\sum_{k=1}^{n} X_{i}(k) \sum_{k=1}^{n} \frac{k}{n} \]

\[\sigma_{n}=\sum_{k=1}^{n} k^{2}-\left(\sum_{k=1}^{n} k\right) 2 / n \]

则当\(\operatorname{sign}\left(\frac{\sigma_{i}}{\sigma_{n}}\right)=\operatorname{sign}\left(\frac{\sigma_{j}}{\sigma_{n}}\right)\),则\(X_i\)\(X_j\)为正关联;

则当\(\operatorname{sign}\left(\frac{\sigma_{i}}{\sigma_{n}}\right)=-\operatorname{sign}\left(\frac{\sigma_{j}}{\sigma_{n}}\right)\),则\(X_i\)\(X_j\)为负关联。

灰色生成数列

灰色系统理论认为,尽管客观表象复杂,但总是有整体功能的,因此必然蕴含某种内在规律。关键在于如何选择适当的方式去挖掘和利用它。灰色系统是通过对原始数据的整理来导求其变化规律的,这是一种就数据导求数据的现实规律的途径,即为灰色序列的生成。一切灰色序列都能通过某种生成弱化其随机性,显现其规律性。数据生成的常用方式有累加生成累减生成加权累加生成。

累加生成

把数列各项(时刻)数据一次累加的过程称为累加生成过程,由累加生成过程所得到的数列称为累加生成数列。

设原始数列为

\[x^{(0)}=\left(x^{(0)}(1), x^{(0)}(2), \cdots ; x^{(0)}(n)\right) \]

\[x^{(1)}(k)=\sum^{k} x^{(0)}(i), k=1,2, \cdots, n \]

\[x^{(1)}=\left(x^{(1)}(1), x^{(1)}(2), \cdots ; x^{(1)}(n)\right) \]

称所有得到的新数列为数列\(x^{(0)}\)的1次累加生成数列。类似地有

\[x^{(r)}(k)=\sum^{k} x^{(r-1)}(i), k=1,2, \cdots, n,r\geq1 \]

称为\(x^0\)的r次累加生成数列。

累减生成

对于原始数据列依次前后相邻的两个数据相减的运算过程称为累减生成过程IAGO。如果原始数据列为\(x^{(1)}=(x^{(1)}(1),x^{(1)}(2),…,x^{(1)}(n))\)\(x^{(0)}(k)=x^{(1)}(k)-x^{(1)}(k-1),k=2,3,…,n\),称所\(x^{(0)}\)\(x^{(1)}\)的1次累减生成数列。

注:从这里的记号也可以看到,从原始数列\(x^{(0)}\),得到的新数列\(x^{(1)}\),再通过累减生成可以还原出原始数列。实际运用中在数列\(x^{(1)}\)的基础上预测出\(x^{‘(1)}\)通过累减生成得到预测数列\(x^{’(0)}\)

加权邻值生成

设原始数列为\(x^{(0)}=(x^{(0)}(1),x^{(0)}(2),…,x^{(0)}(n))\)\(x^{(0)}(k-1),x^{(0)}(k)\)为数列\(x^(0)\)的任意一对邻值。\(x^{(0)}(k-1)\)为后邻值,\(x^{(0)}(k)\)为前邻值,对于常数\(\alpha\in[0,1]\),令\(z^{(0)}(k)=\alpha x^{(0)}(k)+(1-\alpha)x^{(0)}(k-1),k=2,3,…,n\),由此得到的数列\(z^{(0)}\)称为数列\(x^{(0)}\)在权\(\alpha\)下的邻值生成数,权\(\alpha\)也称为生成系数。

特别地,当生成系数\(\alpha=0.5\)时,则称\(z^{(0)}(k)=0.5 x^{(0)}(k)+0.5x^{(0)}(k-1),k=2,3,…,n\)

为均值生成数,也称等权邻值生成数。

灰色模型GM(1,1)

灰色系统理论是基于关联空间、光滑离散函数等概念定义灰导数与灰微分方程,进而用离散数据列建立微分方程形式的动态模型,即灰色模型是利用离散随机数经过生成变为随机性被显著削弱而且较有规律的生成数,建立起的微分方程形式的模型,这样便于对其变化过程进行研究和描述.

设原始数列为\(x^{(0)}=(x^{(0)}(1),x^{(0)}(2),…,x^{(0)}(n))\),其1次累加生成数列为\(x^{(1)}=\left(x^{(1)}(1), x^{(1)}(2), \cdots , x^{(1)}(n)\right)\),其中\(x^{(1)}(k)=\sum^{k} x^{(0)}(i), k=1,2, \cdots, n\)定义\(x^{(1)}\)灰导数\(d(k)=x^{(0)}(k)=x^{(1)}(k)-x^{(1)}(k-1)\)\(z^{(1)}\)为数列\(x^{(1)}\)的邻值生成数列,即\(z^{(0)}(k)=\alpha x^{(0)}(k)+(1-\alpha)x^{(0)}(k-1)\)于是定义GM(1,1)的灰微分方程模型为\(d(k)+\alpha z^{(1)}(k)=b\),

即或\(x^{(0)}(k)+az^{(1)}(k)=b(1)\),,在式(1)中,$x^{(0)}(k)称为灰导数,a称为发展系数 \(,\)z^{(0)}(k)$称为白化背景值,b称为灰作用量。

将时刻表\(k=2,3…,n\)代入(1)式有

\(\left\{\begin{array}{c}x^{(0)}(2)+a z^{(1)}(2)=b \\ x^{(0)}(3)+a z^{(1)}(3)=b \\ \ldots \ldots \cdots \cdots \\ x^{(0)}(n)+a z^{(1)}(n)=b\end{array}\right.\)

引入矩阵向量记号:

\(u=\left[\begin{array}{c}a \\ b\end{array}\right] \quad Y=\left[\begin{array}{c}x^{(0)}(2) \\ x^{(0)}(3) \\ \vdots \\ x^{(0)}(n)\end{array}\right] \quad \mathbf{B}=\left[\begin{array}{cc}-z^{(1)}(2) & 1 \\ -z^{(1)}(3) & 1 \\ \vdots & \vdots \\ -z^{(1)}(n) & 1\end{array}\right]\)

于是GM(1,1)模型可以表示为\(Y=Bu\).

现在问题归结为求a,b的值。用一元线性回归,即最小二乘法求它们的估计值为

\(\hat{u}=\left[\begin{array}{l}\hat{a} \\ \hat{b}\end{array}\right]=\left(B^{T} B\right)^{-1} B^{T} Y\)

注:实际上回归分析中估计值是用软件计算的,有标准程序求解,如matlab等。

GM(1,1)的白化型

对于GM(1,1)的灰微分方程(1),如果将灰导数\(x^{(0)}(k)\)的时刻\(k=2,3,…,n\)视为连续变量t,则\(x^{(1)}\)视为时间t函数\(x^{(1)}(t)\),于是\(x^{(0)}(k)\)对应于导数量级\(\frac{d x^{(1)}(t)}{d t}\),白化背景值\(z^{(0)}(k)\)对应于导数\(x^{(0)}(t)\)。于是GM(1,1)的灰微分方程对应于的白微分方程为

\(\frac{d x^{(1)}(t)}{d t}+a x^{(1)}(t)=b~~(2)\)

\(\int_{k-1}^{k}\left(d x^{1} / d t\right) d t+\int_{k-1}^{k} a x^{1} d t=\int_{k-1}^{k} b d t\)

上式左边第二个式子\(\int_{k-1}^{k} a x^{1} d t \approx a / 2\left(x^{1}(k)+x^{1}(k-1)\right)=a z^{1}\)

白化方程为\(x^0+az^1=b\)

GM(1,1)灰色预测的步骤

1.数据的检验与处理

为了保证GM(1,1)建模方法的可行性,需要对已知数据做必要的检验处理。

设原始数据列为 \(x^{(0)}=(x^{(0)}(1),x^{(0)}(n))\),计算数列的级比

\(\lambda(k)=\frac{x^{(0)}(k-1)}{x^{(0)}(k)}, k=2,3, \cdots, n .\)

如果所有的级比都落在可容覆盖区间

\(X=\left(e^{\frac{-2}{n+1}}, e^{\frac{2}{n+1}}\right)\)内,则数据列\(x^{(0)}\)可以建立GM(1,1)模型且可以进行灰色预测。否则对数据做适当的变换处理,如平移变换:

取C使得数据列

\(y^{(0)}(k)=x^{(0)}(k)+c,k=1,2,…,n\)

的级比都落在可容覆盖内。

2.建立GM(1,1)模型

不妨设\(x^{(0)}=(x^{(0)}(1),x^{(0)}(2),…,x^{(0)}(n))\)满足上面的要求,以它为数据列建立GM(1,1)模型\(x^{(0)}(k)+az^{(1)}(k)=b\)

解为\(x^{(1)}(t)=(x^{(0)}(1)-\frac{b}{a})e^{-a(t-1)}+\frac{b}{a}\).于是得到预测值

\(\hat{x}^{(1)}(k+1)=(x^{(0)}(1)-\frac{b}{a})e^{-ak}+\frac{b}{a},k=1,2,…,n-1\),

从而相应地得到预测值:

\(\hat{x}^{(0)}(k+1)=\hat{x}^{(1)}(k+1)-\hat{x}^{(1)}(k),k=1,2,…,n-1\)

3.检验预测值

(1)残差检验:计算相对残差

\[\varepsilon(k)=\frac{x^{(0)}(k)-\hat{x}^{(0)}(k)}{x^{(0)}(k)},k=1,2,…,n, \]

如果对所有的\(|\varepsilon(k)|<0.1\),则认为达到较高的要求;否则,若对所有的

\(|\varepsilon(k)|<0.2\),则认为达到一般要求。

(2)级比偏差值检验:计算

\[\rho(k)=1-\frac{1-0.5a}{1+0.5a}\lambda(k) \]

如果对所有的\(|\rho(k)|<0.1\),则认为达到较高的要求;否则若对所有的\(|\rho(k)|<0.2\),则认为达到一般要求。

matlab代码模板

y=input('请输入数据');
n=length(y);
yy=ones(n,1);
yy(1)=y(1);
for i=2:n
    yy(i)=yy(i-1)+y(i)
end
B=ones(n-1,2);
for i=1:(n-1)
    B(i,1)=-(yy(i)+yy(i+1))/2;
    B(i,2)=1;
end
BT=B';
for j=1:(n-1)
    YN(j)=y(j+1);
end
YN=YN';
A=inv(BT*B)*BT*YN;
a=A(1);
u=A(2);
t=u/a;
t_test=input('输入需要预测的个数');
i=1:t_test+n;
yys(i+1)=(y(1)-t).*exp(-a.*i)+t;
yys(1)=y(1);
for j=n+t_test:-1:2
    ys(j)=yys(j)-yys(j-1);
end
x=1:n;
xs=2:n+t_test;
yn=ys(2:n+t_test);
plot(x,y,'^r',xs,yn,'*-b');
det=0;
for i=2:n
    det=det+abs(yn(i)-y(i));
end
det=det/(n-1);
disp(['百分绝对误差为:',num2str(det),'%']);
    disp(['预测值为:',num2str(ys(n+1:n+t_test))]);
posted @ 2022-07-21 19:21  plzplz  阅读(271)  评论(0编辑  收藏  举报
https://i.loli.net/2019/07/25/5d39c1d4c249939054.jpg