天天看點

重溫馬爾科夫随機過程

Why is a Markov Chain important? It is important because of its stationary distribution.

馬爾科夫鍊随機過程之是以如此重要,在于其平穩分布(stationary distribution),也即對它而言,它存在一個平穩分布。

1. 記号的說明

q(i,j)==q(j|i)==q(i→j)

表示一個轉移矩陣為 Q 的馬氏鍊,從狀态 i轉移到狀态 j 的機率

2. 馬氏性

Xn 辨別時刻 n 的狀态,關于馬氏性的數學表達為:

P(Xn+1=k|Xn=kn,Xn−1=kn−1,…,X1=k1)=P(Xn+1=k|Xn=kn)

也就是狀态轉移的機率隻依賴與

3. 定理一

如果一個非周期馬氏鍊具有機率轉移矩陣 P ,且它的任何兩個狀态都是連通的,則 limn→∞Pnij 存在且與 i 無關(也即矩陣 Pn 的每一行元素都相同),記 limn→∞Pnij=π(j) ,我們有:

limn→∞Pn=⎡⎣⎢⎢⎢⎢⎢⎢π(1)π(1)⋯π(1)⋯π(2)π(2)⋯π(2)⋯⋯⋯⋯⋯⋯π(j)π(j)⋯π(j)⋯⋯⋯⋯⋯⋯⎤⎦⎥⎥⎥⎥⎥⎥

π(j)=∑i=0∞π(i)Pij

也即

π=πP

π 是方程 π=πP 的唯一非負解

其中, π=[π(1),π(2),⋯,π(j),⋯] , ∑i=0nπ(i)=1 (符合機率上對分布的要求), π 稱為馬氏鍊的平穩分布。

  1. 馬氏鍊的任何兩個狀态是連通的含義是指存在一個 n ,使得矩陣 Pn 的任何一個元素的數值都大于0.
  2. 兩個狀态 i,j 連通并非是指 i 可以直接一步轉移到 j ( Pij>0 ),而是指 i 可以通過有限的 n 步轉移到達 j (Pnij>0)
  3. 我們用 Xi 表示馬氏鍊上跳轉第 i 步後所處的狀态,如果 limn→∞Pnij=π(j)存在,我們試着來證明上述結論的第二個結論:

P(Xn+1=j)==∑i=0∞P(Xn=i)P(Xn+1=j|Xn=i)∑i=0∞P(Xn=i)Pij

上式兩邊取極限就得到: π(j)=∑i=0∞π(i)Pij

平穩分布的考察

我們先來看馬氏鍊的一個具體的例子。社會學家經常把人按其經濟狀況分成三類:下層(lower-class)、中層(middle-class)、上層(upper-class),我們用1,2,3分别代表這三個階層(對應于馬氏鍊中環境下的三個狀态)。如下圖所示:

重溫馬爾科夫随機過程

社會學家們統計研究發現,決定一個收入階層的最為重要的因素是就是其父母的收入階層。如果一個人的收入屬于下層類别,那麼他的孩子屬于下層收入的機率是0.65,屬于中層收入的機率是0.28,屬于上層收入的機率是0.07,如上圖(辨別狀态轉移矩陣)的第一行所示。使用矩陣的表示方式,轉移機率矩陣為:

P=⎡⎣⎢0.650.150.120.280.670.360.070.180.52⎤⎦⎥

假設目前這一代人處在下層、中層、上層的人的比例是機率 分布向量 π0=[π0(1),π0(2),π0(3)] ,則他們的子女的分布比例将是 π1=π0P ,他們的孫子代的分布比例将是 π2=π1P=π0P2 ,第 n 代子孫的收入比例将是 πn=π0Pn。

假設初始機率分布為 π0=[0.21,0.68,0.11] ,我們可以使用如下的python程式,計算前 n 代人的分布狀況:

import numpy as np
pi_0 = np.array([ ,, ])
P = np.array([[.65, .28, .07],
              [.15, .67, .18],
              [.12, .36, .52]])
x = pi_0
pi_n = [x]
for i in range():
    print('{:.3f} {:.3f} {:.3f}'.format(x[], x[], x[]))
    x = np.dot(x, P)
    pi_n.append(x)
           

運作的結果如下:

0: 0.210 0.680 0.110
 1: 0.252 0.554 0.194
 2: 0.270 0.512 0.218
 3: 0.278 0.497 0.225
 4: 0.282 0.492 0.226
 5: 0.284 0.490 0.226
 6: 0.285 0.489 0.225
 7: 0.286 0.489 0.225
 8: 0.286 0.489 0.225
 9: 0.286 0.489 0.225
10: 0.286 0.489 0.225
11: 0.286 0.489 0.225
12: 0.286 0.489 0.225
           

我們發現從7代人開始,這個分布就穩定不變了,等等,這背後的意義是什麼,是階級固化呀,數學能不fascinating嗎。

再來驗證 πP=π,

print(pi_n[-])
            # [ 0.28658731  0.48848854  0.22492415]
print(np.dot(pi_n[-], P))
            # [ 0.28654593  0.48850446  0.22494961]
           

接着我們問,這是偶然的嗎,也即跟初始分布密切相關的嗎?我們換一個初始機率分布 π0=[0.75,0.15,0.1] 試試看,繼續計算前 n 代人的分布狀況如下:

:   
 :   
 :   
 :   
 :   
 :   
 :   
 :   
 :   
 :   
:   
:   
:   
....     
           

從第10代開始也達到令人發指的平穩。更為神奇的是,兩者給定的不不同初始機率分布,最終都收斂到機率分布 π=[0.286,0.489,0.225],也即收斂的行為和初始機率分布 π0 無關,收斂行為主要是由機率轉移矩陣 P 決定的。我們不妨計算一下 Pn(這裡的 Pn 仍表示矩陣乘法,而非按位相乘):

t = P
for i in range():
    if i > :
        print(t)
    t = np.dot(t, P)
           

輸出為:

[[ 0.28650174  0.48852144  0.22497682]
 [ 0.28650126  0.48852163  0.22497712]
 [ 0.28650118  0.48852166  0.22497717]]
[[ 0.28650156  0.48852151  0.22497693]
 [ 0.28650132  0.4885216   0.22497708]
 [ 0.28650127  0.48852162  0.22497711]]
[[ 0.28650147  0.48852154  0.22497698]
 [ 0.28650135  0.48852159  0.22497706]
 [ 0.28650132  0.4885216   0.22497708]]
[[ 0.28650143  0.48852156  0.22497701]
 [ 0.28650136  0.48852159  0.22497705]
 [ 0.28650135  0.48852159  0.22497706]]

...
           

我們發現,當 n 足夠大的時候,這個 Pn矩陣的每一行都是穩定地收斂到 π=[0.286,0.489,0.225] 這個機率分布。自然地,這個收斂現象并非是某一個馬氏鍊所獨有的,而是絕大多數馬氏鍊的共同行為。

定理二(細緻平穩條件,detailed balance condition)

如果非周期馬氏鍊的轉移矩陣 P 和分布 π(x)滿足:

π(x)Pij=π(j)Pji

則 π(x) 是馬氏鍊的平穩分布,上式被稱為細緻平穩條件(detailed balance condition)。

證明:

由細緻平穩條件的定義可知:

∑i=0∞π(i)Pij=∑i=0∞π(j)Pji=π(j)∑i=0∞Pji=π(j)⇒πP=π

故 π 是平穩分布。

繼續閱讀