灰色马尔科夫模型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=1∑kx0,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,k−1(k=2,⋯,n) - 再判断
ρ
k
\rho_k
ρk 是否均在可容性覆盖区间
∂
=
(
e
−
2
/
(
n
+
1
)
,
e
2
/
(
n
+
1
)
)
\partial = ( e ^ { - 2 /( n + 1 )} , e ^ { 2 /( n + 1 )} )
∂=(e−2/(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(1,1) 模型的一阶微分方程:
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.5xn−1+xn)1⋯1 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)e−ak+α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+1−x^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,2−x^0,2,x^0,3−x^0,3,⋯,x^0,k−x^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,k−A0∣<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(1,1) 模型可直接预测数据; 若精度等级不符合,则对预测数据进行修正。
灰色马尔科夫预测模型
对
E
0
E_0
E0建立灰色
G
M
(
1
,
1
)
GM( 1,1)
GM(1,1)模型:
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+1−e^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={1−1(x0,k−x0,k>0)(x0,k−x0,k<0)
引入灰色马尔科夫模型判断
m
0
,
k
m _ { 0 , k }
m0,k 的正负。适用于预测随机变化无规律的数据,弥补了传统
G
M
(
1
,
1
)
GM( 1,1)
GM(1,1) 模型对波动性和趋势性数据预测精度低的不足。其计算过程如下:
- 根据 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=(1,0) ; 若为负, μ 0 = ( 0 , 1 ) \mu_0 = ( 0,1) μ0=(0,1) 。
- 根据 μ t = μ 0 P t \mu_ { t } = \mu _ { 0 } P ^ { t } μt=μ0Pt求出经过 t t t次状态转移后,第 t t t次的状态概率。选取概率最大的状态作为最终结果,若两种状态概率相等,取前一次计算的结果:
仿真结果
matlab源码
https://mbd.pub/o/bread/YpWWkphs源码