馬爾科夫過程描述的是空間狀態(tài)經(jīng)過一個狀態(tài)到另一個狀態(tài)轉(zhuǎn)換的隨機過程。該過程要求具備“無記憶”性質(zhì),也就是下一狀態(tài)的概率分布只與當前的狀態(tài)有關(guān),再時間序列中其他前面的事件無關(guān)。
馬爾科夫隨機序列由元組<S,P>表示。 S 代表有限狀態(tài)集,P 是狀態(tài)轉(zhuǎn)移概率矩陣。公式,描述了一個狀態(tài)轉(zhuǎn)移到另一個狀態(tài)發(fā)生的概率。
本文主要以代碼描述MP過程。若要詳細看圖文例子,可參考知乎https://zhuanlan.zhihu.com/p/35124726
import numpy as np
state = ["sleep","icecream","run"]
transitionName =[["ss","si","sr"],["is","ii","ir"],["rs","ri","rr"]]
transitionMatrix =[[0.2,0.6,0.2],[0.1,0.6,0.3],[0.2,0.7,0.1]]
def activity_forecast(days):
activitytoday= "sleep"
print("start state",activitytoday)
activityList = [activitytoday]
i =0
prob =1
while i < days :
if activitytoday =="sleep":
change = np.random.choice(transitionName[0],replace=True,p=transitionMatrix[0])
if change =='ss':
prob *= transitionMatrix[0][0]
activityList.append("sleep")
elif change == 'si':
prob *= transitionMatrix[0][1]
activityList.append("icecream")
activitytoday ='icecream'
else :
prob *= transitionMatrix[0][2]
activityList.append("run")
activitytoday='run'
elif activitytoday == "icecream":
change = np.random.choice(transitionName[1], replace=True, p=transitionMatrix[1])
if change == 'is':
prob *= transitionMatrix[1][0]
activityList.append("sleep")
activitytoday = 'sleep'
elif change == 'ii':
prob *= transitionMatrix[1][1]
activityList.append("icecream")
else:
prob *= transitionMatrix[1][2]
activityList.append("run")
activitytoday = 'run'
else:
change = np.random.choice(transitionName[2], replace=True, p=transitionMatrix[2])
if change == 'rs':
prob *= transitionMatrix[2][0]
activityList.append("sleep")
activitytoday = 'sleep'
elif change == 'ri':
prob *= transitionMatrix[2][1]
activityList.append("icecream")
activitytoday = 'icecream'
else:
prob *= transitionMatrix[2][2]
activityList.append("run")
i+=1
print(" after " + str(i) + " days: " + activitytoday)
print("Possible states: " + str(activityList))
print("Probability of the possible sequence of states: " + str(prob))
activity_forecast(2)
運行結(jié)果 :

markov.png