马尔科夫过程(Markov Process,MP)

马尔科夫过程描述的是空间状态经过一个状态到另一个状态转换的随机过程。该过程要求具备“无记忆”性质,也就是下一状态的概率分布只与当前的状态有关,再时间序列中其他前面的事件无关。

马尔科夫随机序列由元组<S,P>表示。 S 代表有限状态集,P 是状态转移概率矩阵。公式P_{ss^{'}}=p[S_{t+1}=s^{'}|S_t=s],描述了一个状态转移到另一个状态发生的概率。

本文主要以代码描述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)

运行结果 :


markov.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 今年还是会继续每周动笔画一画,画够一年52周。 看了段讲额尔济纳胡杨林的小视频,让人长草,希望今年能去看一看。画了...
    兔娅娅阅读 336评论 0 2
  • 工作最重要的是顺心,可现在每每上班心里就堵的慌,对未来的茫然,对现状的无奈。我想象中的工作是,有福同享有难同当,可...
    A菠菜阅读 371评论 0 0
  • 爱和感恩阅读 319评论 0 0
  • 感赏儿子今天在餐桌上跟我们讨论我的工作。我跟老公聊起这几天去韶关的调研工作,儿子主动问我调研是做什么,我把工作一一...
    陈庆chen阅读 113评论 0 1
  • ©文章由「更好时代」原创发布,保留所有权,全网违反相关法律的抄袭行为将受到更好时代专业法律团队相应的严重法律追责。...
    更好时代阅读 511评论 0 0