動力系統(tǒng)的馬爾科夫鏈——Python數(shù)學建模極簡入門(九)

本文將在前面介紹的動力系統(tǒng)的基礎上,解釋馬爾科夫鏈的知識

首先介紹一下概念,馬爾科夫鏈是由具有以下性質的一系列事件構成的過程:

  1. 一個事件有有限多個結果,稱為狀態(tài),該過程總是這些狀態(tài)中的一個;
  2. 在過程的每個階段或者時段,一個特定的結果可以從它現(xiàn)在的狀態(tài)轉移到任何狀態(tài),或者保持原狀;
  3. 每個階段從一個狀態(tài)轉移到其他狀態(tài)的概率用一個轉移矩陣表示,矩陣每行的各元素在0到1之間,每行的和為1。
實例:選舉投票趨勢的預測(實例來自于華章數(shù)學譯叢版《數(shù)學建?!罚?/h5>

以美國大選為例,首先取得過去十次選舉的歷史數(shù)據,然后根據歷史數(shù)據得到選民意向的轉移矩陣。我們假設得到了如下的轉移矩陣(很明顯這個數(shù)據不是真實的):

轉移矩陣
三狀態(tài)馬爾科夫鏈

這樣就形成了一個差分方程組

Rn+1 = 0.75Rn+0.20Dn+0.40In
Dn+1 = 0.05Rn+0.60Dn+0.20In
In+1 = 0.20Rn+0.20Dn+0.40In

根據我們以前將差分方程組的內容,可以推測出選民投票意向的長期趨勢

import matplotlib.pyplot as plt
RLIST = [0.33333]
DLIST = [0.33333]
ILIST = [0.33333]
for i in range(40):
    R = RLIST[i]*0.75 + DLIST[i]*0.20 + ILIST[i]*0.40
    RLIST.append(R)
    D = RLIST[i]*0.05 + DLIST[i]*0.60 + ILIST[i]*0.20
    DLIST.append(D)
    I = RLIST[i]*0.20 + DLIST[i]*0.20 + ILIST[i]*0.40
    ILIST.append(I)
plt.plot(RLIST)
plt.plot(DLIST)
plt.plot(ILIST)
plt.xlabel('Time')
plt.ylabel('Voting percent')
plt.annotate('DemocraticParty',xy = (5,0.2))
plt.annotate('RepublicanParty',xy = (5,0.5))
plt.annotate('IndependentCandidate',xy = (5,0.25))
plt.show()
print(RLIST,DLIST,ILIST)
投票意向的圖形解

最后得到的長期趨勢是:56%的人選共和黨、19%的人選民主黨、25%的人選獨立候選人。


這個問題還可以直接用矩陣來解
關于馬爾科夫鏈的轉移矩陣性質還有一個定理叫Chapman-kolmogorov方程:

C-K方程

也就是說P(m) = (Pij(m))是從狀態(tài)i到狀態(tài)j的m步轉移矩陣。熟悉矩陣運算的朋友應該很容易就能證明出來。

我們已經得到了一步轉移矩陣,只需做個迭代就可以了:

import numpy as np
a = np.array([[0.75,0.05,0.20],[0.20,0.60,0.20],[0.40,0.20,0.40]])
p = np.mat(a)
for i in range(40):
    p = p*p   
print(p)```
得到40步轉移矩陣:
```[[ 0.55560086  0.1944603   0.25002039]
 [ 0.55560086  0.1944603   0.25002039]
 [ 0.55560086  0.1944603   0.25002039]]```
跟前面差分方程模擬結果一致,實際應用中往往使用這種方式來求解。


> 想了解馬爾科夫鏈的升級版隱馬爾可夫模型的朋友可以移步知乎:
[如何用簡單易懂的例子解釋隱馬爾科夫模型](https://www.zhihu.com/question/20962240)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容