灰色马尔科夫模型matlab实现

灰色预测GM(1,1)

  • 对待预测序列 X 0 = { x 0 , 1 , x 0 , 2 , ⋯   , x 0 , n } X_0 = \{ x _ { 0 , 1 } , x _ { 0 , 2 } , \cdots , x _ { 0 , n } \} X0={ x0,1,x0,2,,x0,n},生成 X 0 X_0 X0的一次累加序列 X 1 = { x 1 , 1 , x 1 , 2 , ⋯   , x 1 , n } X_1 = \{ x _ { 1 , 1 } , x _ { 1 , 2 } , \cdots , x _ { 1 , n } \} X1={ x1,1,x1,2,,x1,n},其中:
    x 1 , k = ∑ t = 1 k x 0 , i ( k = 1 , 2 , ⋯   , n ) x _ { 1 , k } = \sum _ { t = 1 } ^ { k } x _ { 0 , i } \quad ( k = 1 , 2 , \cdots , n ) x1,k=t=1kx0,i(k=1,2,,n)
  • 对原始数据进行级比检验。先计算原始数据的级比 ρ k \rho_k ρk序列:
    ρ k = x 0 , k − 1 x 0 , k ( k = 2 , ⋯   , n ) \rho_ {k } = \frac { x _ { 0 , k - 1 } } { x _ { 0 , k } } \quad ( k = 2 , \cdots , n ) ρk=x0,kx0,k1(k=2,,n)
  • 再判断 ρ k \rho_k ρk 是否均在可容性覆盖区间 ∂ = ( e − 2 / ( n + 1 ) , e 2 / ( n + 1 ) ) \partial = ( e ^ { - 2 /( n + 1 )} , e ^ { 2 /( n + 1 )} ) =(e2/(n+1),e2/(n+1))内。若是,则相应数据序列可以建立灰色 G M ( 1 , 1 ) GM( 1, 1) GM(1,1)模型; 否则,应选取适当的常数 b b b对该组数据进行平移转换处理,使处理后的数据序列 Y 0 = y 0 , 1 , y 0 , 2 , ⋯   , y 0 , n Y_0 = { y _ { 0 , 1 } , y _ { 0 , 2 } , \cdots , y _ {0 , n} } Y0=y0,1,y0,2,,y0,n 的级比落入可容性覆盖区间内,其平移转换过程为:
    y 0 , k = x 0 , k + b y _ { 0 , k } = x _ { 0 , k } + b y0,k=x0,k+b
    通过一次累加序列 X 1 X_1 X1,建立南四湖灰色 G M ( 1 , 1 ) GM( 1,1) GM(11) 模型的一阶微分方程:
    d X 1 d t + α X 1 = q \frac { d X _ { 1 } } { d t } + \alpha X _ { 1 } = q dtdX1+αX1=q
    式中: α , q \alpha, q α,q分别为发展系数和灰色作用量。
  • a = ( α , q ) T a = ( \alpha , q ) ^ { T } a=(α,q)T运用最小二乘法,求解:
    a = ( α , q ) T = ( B T B ) − 1 B T D a = ( \alpha , q ) ^ { T } = ( B ^ { T } B ) ^ { - 1 } B ^ { T } D a=(α,q)T=(BTB)1BTD
    其中 B = [ − 0.5 ( x 1 + x 2 ) 1 ⋯ ⋯ ( − 0.5 x n − 1 + x n ) 1 ] D = [ x 0 , 2 x 0 , 0 , 2 ] B = \left[ \begin{array} { l l } { - 0.5 (x _ { 1 }+x_2) } & { 1 } \\ { \cdots } & \cdots \\ { (- 0.5 x _ { n-1 } +x _ { n} ) } & { 1 } \end{array} \right] \quad D = \left[ \begin{array} { l l } { x _ { 0 , 2 } } \\ { x _ { 0 , 0 , 2 } } \end{array} \right] B= 0.5(x1+x2)(0.5xn1+xn)11 D=[x0,2x0,0,2]
  • 得到灰色 GM( 1,1) 模型:
    x ^ 1 , k + 1 = ( x 0 , 1 − q α ) e − a k + q α \hat{x}_ { 1 , k + 1 } = ( x _ { 0 , 1 } - \frac { q } { \alpha } ) e ^ { - a k } + \frac { q } { \alpha } x^1,k+1=(x0,1αq)eak+αq
  • 将累加值 x ^ 1 , k + 1 \hat{x}_ { 1 , k + 1 } x^1,k+1经过一次累减还原成预测值 x ^ 0 , k + 1 \hat{x}_ { 0 , k + 1 } x^0,k+1
    x ^ 0 , k + 1 = x ^ 1 , k + 1 − x ^ 1 , k \hat{x}_ { 0 , k + 1 } = \hat{x} _ { 1 , k + 1 } - \hat{x}_ { 1 , k } x^0,k+1=x^1,k+1x^1,k

模型检验

为了检验模型的可信度,需对预测值进行后验差检验。建立一阶残差序列:
E 0 = { e 0 , 1 , e 0 , 2 , ⋯   , e 0 , n } = { x ^ 0 , 2 − x ^ 0 , 2 , x ^ 0 , 3 − x ^ 0 , 3 , ⋯   , x ^ 0 , k − x ^ 0 , k , x ^ 0 , k } E _ { 0 } = \{ e _ { 0 , 1 } , e _ { 0 , 2 } , \cdots , e _ { 0 , n } \} =\\ \{ \hat{x}_ { 0 , 2 } - \hat{x}_ { 0 , 2 } , \hat{x}_ { 0 , 3 } - \hat{x}_ { 0 , 3 } , \cdots , \hat{x}_ { 0 , k } - \hat{x}_ { 0 , k } , \hat{x}_ { 0 , k } \} E0={ e0,1,e0,2,,e0,n}={ x^0,2x^0,2,x^0,3x^0,3,,x^0,kx^0,k,x^0,k}
原始数据序列的方差为 s 1 s_1 s1,残差序列 E 0 E_0 E0的方差为 s 2 s_2 s2,分别计算后验比 c c c 与小误差概率 p p p:
c = s 2 s 1 p = { 1 4 0 , k − A 0 ∣ < 0.6745 s 1 } c = \frac { s _ { 2 } } { s _ { 1 } }\\ p = \{ 14 _ { 0 , k } - A _ { 0 } | \lt 0.6745 s _ { 1 } \} c=s1s2p={ 140,kA0<0.6745s1}
其中 p p p c c c的大小共同决定模型精度等级。表给出了 4 级好、合格、基本合格和不合格的模型精度等级。模型 c c c越小, p p p越大,则模型精度高。 c c c越小,则 s 1 s_1 s1越大、 s 2 s_2 s2越小,即原始数据序列离散程度大,残差序列离散程度小,由模型所得预测值与原始数据相差小, p p p 值越大则表明预测值较为均匀。若检验精度等级符合要求,则建立的灰色 G M ( 1 , 1 ) GM( 1,1) GM(11) 模型可直接预测数据; 若精度等级不符合,则对预测数据进行修正。
image.png

灰色马尔科夫预测模型

E 0 E_0 E0建立灰色 G M ( 1 , 1 ) GM( 1,1) GM(11)模型:
e ^ 1 , k + 1 = ( e 0 , 2 − q ′ α ′ ) e − α ′ t + q ′ α ′ ( k = 2 , 3 , ⋯   , n ) \hat{e} _ { 1 , k + 1 } = ( e _ { 0 , 2 } - \frac { q ^ { \prime } } { \alpha ^ { \prime } } ) e ^ { - \alpha ^ { { \prime } t } } + \frac { q ^ { \prime } } { \alpha ^ { \prime } } \quad ( k = 2 , 3 , \cdots , n ) e^1,k+1=(e0,2αq)eαt+αq(k=2,3,,n)
将模型进行累减还原,得到残差修正值 e ^ 0 , k + 1 \hat{e} _ { 0 , k + 1 } e^0,k+1:
e ^ 0 , k + 1 = e ^ 1 , k + 1 − e ^ 1 , k \hat{e} _ { 0, k + 1 } = \hat{e} _ { 1 , k + 1 } - \hat{e} _ { 1 , k } e^0,k+1=e^1,k+1e^1,k
采用残差修正值 e ^ 0 , k + 1 \hat{e} _ { 0, k + 1 } e^0,k+1 对传统GM( 1,1) 模型预测值进行修正,得到修正后的:
x ^ 0 , k ′ = x ^ 0 , k + m 0 , k e ^ 0 , k + 1 \hat{x} _ { 0 , k } ^ { \prime }= \hat{x} _ { 0 , k } + m _ { 0 , k }\hat{e} _ { 0, k + 1 } x^0,k=x^0,k+m0,ke^0,k+1
其中:
m 0 , k = { 1 ( x 0 , k − x 0 , k > 0 ) − 1 ( x 0 , k − x 0 , k < 0 ) m _ { 0 , k } = \{ \begin{array} { l l } { 1 } & { ( x _ { 0 , k } - x _ { 0 , k } \gt 0 ) } \\ { - 1 } & { ( x _ { 0 , k } - x _ { 0 , k } \lt 0 ) } \end{array} m0,k={ 11(x0,kx0,k>0)(x0,kx0,k<0)
引入灰色马尔科夫模型判断 m 0 , k m _ { 0 , k } m0,k 的正负。适用于预测随机变化无规律的数据,弥补了传统 G M ( 1 , 1 ) GM( 1,1) GM(11) 模型对波动性和趋势性数据预测精度低的不足。其计算过程如下:

  • 根据 E 0 E_0 E0 划分状态。本文划分两种状态,状态 1 表示残差为正,状态 2 表示残差为负。
  • . 求从状态 i i i 转移到状态 j j j 经过的次数所占的概率 p i j p_{ij} pij:
    p i j = M i j M i ( i = 1 , 2 ; j = 1 , 2 ) p _ { i j } = \frac { M _ { i j } } { M _ { i } } ( i = 1 , 2 ; j = 1 , 2 ) pij=MiMij(i=1,2;j=1,2)
    式中: M i j M_{ij} Mij为状态 i i i转移到状态 j j j经过的次数; M i M_i Mi为状态 i i i出现的总次数。根据式得到状态转移矩阵 P P P
    P = [ P 11 P 12 P 21 p 22 ] P = \left[ \begin{array} { l l } { P _ { 11 } } & { P _ { 12 } } \\ { P _ { 21 } } & { p _ { 22 } } \end{array} \right] P=[P11P21P12p22]
  • 选定残差序列最后一个值的状态作为初始状态向量 μ 0 \mu_0 μ0。设 μ 0 = ( μ 0 , 1 , μ 0 , 2 ) \mu_0 = ( \mu_{0,1}, \mu_0,2 ) μ0=(μ0,1,μ0,2),其中 μ 0 , 1 , μ 0 , 2 \mu_{0,1}, \mu_{0,2} μ0,1,μ0,2分别代表处于状态 1 和状态 2 时的概率。即最后一个残差值若为正, μ 0 = ( 1 , 0 ) \mu_0 = ( 1,0) μ0=(10) ; 若为负, μ 0 = ( 0 , 1 ) \mu_0 = ( 0,1) μ0=(01)
  • 根据 μ t = μ 0 P t \mu_ { t } = \mu _ { 0 } P ^ { t } μt=μ0Pt求出经过 t t t次状态转移后,第 t t t次的状态概率。选取概率最大的状态作为最终结果,若两种状态概率相等,取前一次计算的结果:

仿真结果

image.png

matlab源码

https://mbd.pub/o/bread/YpWWkphs源码

猜你喜欢

转载自blog.csdn.net/abcwsp/article/details/123283541