马尔可夫链(Markov chain)的基本认识

本文内容主要参考:李航老师的《统计学习方法》
还有看看马尔科夫链

一、马尔可夫链在统计学中的定义

在这里插入图片描述
马尔可夫链(Markov Chain),描述了一种状态序列,其每个状态值取决于前面有限个状态。
在这里插入图片描述

二、如何通俗理解马尔可夫链

马尔可夫链指的是在已知现在的条件下,过去的信息与未来是独立的,这个独立是条件独立性。
最简单的例子就是:
已知父母具有某项特长天赋的条件下,孩子也拥有的概率。与已知祖宗十八代和父母的信息的条件下,孩子拥有这项天赋的概率,是一样的。
若要用人生的例子来讲,已知你大学学习情况下和已知你在幼儿园小学初中高中大学的所有学习情况下,考研能不能考上的概率是一样的。
但是,也不一定有道理:
考研考不考得上取决于学习的能力,而这种能力,其实是从小学初中高中大学的一个知识和学习能力的积累,尤其是复试考察的素质教育方面。
所以要要弄清适用情况
一、连续性的
1)生活中,无数的人,都是通过改变现在而改变未来的啊,非常正确啊!
2)但是,实际中,没有你的过去,怎么又有你的现在呢。这是个相互因果的链条啊!
3)所谓“链”,就是一环扣一环,环环有关才能称其为“链”。如果仅与临近的环有关,还能有链的概念吗?如从这个角度来说,马尔科夫链(难道定义错了,请看第4点)的这个举例,就是准确的。
4)但是,马尔科夫链的概念就是:数学中具有马尔可夫性质的离散时间随机过程。描述了一种状态序列,其每个状态值只取决于该状态值的前面的有限个状态,与再之前的状态无关。显然,按照这个定义的内涵,上面“你的未来只与你现在有关,而无关你的过去”又是错误的。即拿持续诸如生命过程、事物发展的过程来描述马尔科夫链概念,是不准确的
上面,3与4的结合,似乎辩证法、相对论的哲学问题出现了,且悖论也似乎形成了!!!
二、离散型的
比如:
丢出一个骰子,确定了结果后,丢下一次骰子的结果和上一次骰子的结果没有关系,同样和之前任何一次丢骰子都没关系,每个点均是1/6。
一个小孩子,他正在学习,下一刻继续学习的概率是一个固定数值,因为他的日常行为习惯通常都会固定,正在学习,下一刻转而去玩手机的概率也是某个固定数值,那么,只要时间足够长,比如一个暑假,他总计花费在学习上的时间和玩手机上的时间比例就会固定。
上面的例子满足1.每次事件发生概率固定;2.相互独立

三、马尔可夫链简单来说

一句话描述
状态空间中经过从一个状态到另一个状态的转换的随机过程。该过程要求具备无记忆的性质:下一状态的概率分布只能由当前状态决定,在时间序列中它前面的事件均与之无关。
也就是说,马尔可夫链是一个随机系统,它必须满足两个条件:

  • 系统任意时刻可以用有限个可能状态之一来描述
  • 系统无后效性,即某阶段的状态一旦确定,则此后过程的演变不再受此前各种状态及决策的影响

在马尔可夫链的每一步,系统根据概率分布,可以从一个状态变到另一个状态,也可以保持当前状态。状态的改变叫做转移,与不同的状态改变相关的概率叫做转移概率随机漫步就是马尔可夫链的例子。随机漫步中每一步的状态是在图形中的点,每一步可以移动到任何一个相邻的点,在这里移动到每一个点的概率都是相同的(无论之前漫步路径是如何的)
数学模型——初步理解马尔可夫链(Markov chain)
以下是随机漫步程序的python语言实现:

from random import choice
import matplotlib.pyplot as plt

class RandomWork():
    def __init__(self, num_points=5000):
        self.num_points = num_points

        self.x_values = [0]
        self.y_values = [0]

    def fill_walk(self):
        while len(self.x_values) < self.num_points:
            x_direction = choice([1, -1])
            x_distance = choice([0, 1, 2, 3, 4])
            x_step = x_direction * x_distance

            y_direction = choice([1, -1])
            y_distance = choice([1, 2, 3, 4])
            y_step = y_direction * y_distance

            next_x = self.x_values[-1] + x_step
            next_y = self.y_values[-1] + y_step

            self.x_values.append(next_x)
            self.y_values.append(next_y)

rw = RandomWork()
rw.fill_walk()
plt.plot(rw.x_values, rw.y_values)
plt.show()

结果:
在这里插入图片描述

四、离散状态马尔可夫链

4.1、转移概率矩阵和状态分布

离散状态马尔可夫链X = {X0,X1,……,Xt,……},随机变量Xt(t = 0,1,2,……)定义在离散空间S,转移概率分布可以由矩阵表示。
在这里插入图片描述
马尔可夫链的转移概率矩阵:
在这里插入图片描述
考虑马尔可夫链X = {X0,X1,……,Xt,……}在时刻t(t = 0,1,2,……)的概率分布,称为时刻t的状态分布,记作:
在这里插入图片描述
特别地,马尔可夫链的初始状态分布可以表示为:
在这里插入图片描述
有限离散状态的马尔可夫链可以由有向图表示。结点表示状态,边表示状态之间的转移,边上的数值表示转移概率。从一个初始状态出发,根据有向边上定义的概率在状态之间随机跳转(或随机转移),就可以产生状态的序列。马尔可夫链实际上是刻画随时间在状态之间转移的模型,假设未来的转移状态只依赖于现在的状态,而与过去的状态无关。
在这里插入图片描述
在这里插入图片描述
下面看一个马尔可夫链应用的例子。
自然语言处理、语音处理中经常用到语言模型(language model),是建立在词表上的n阶马尔可夫链。比如,在英语语音识别中,语音模型产生出两个候选:“How to recognize speech”与“How to wreck a nice beach”,要判断哪个可能性更大。显然从语义的角度前者的可能性更大,语言模型可以帮助做出这个判断。
在这里插入图片描述
在这里插入图片描述
语言模型的学习等价于确定马尔可夫链中的转移概率值,如果有充分的语料,转移概率可以直接从语料中估计。直观上,“wreck a nice”出现之后,下面出现“beach”的概率极低,所以第二个语句的概率应该更小,从语言模型的角度看第一个语句的可能性更大。
在这里插入图片描述
这是因为
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

用python写这个晴雨天模型

概率:
在这里插入图片描述
转移矩阵P:
在这里插入图片描述
初始状态分布:
在这里插入图片描述
根据这个马尔可夫链模型,用Python计算出第二天、第三天甚至一个月后的天气概率分布(状态分布):

#离散状态马尔可夫链
from numpy import *

#今天是晴天,那么明天是晴天的概率是0.9,雨天的概率是0.1。
#今天是雨天,那么明天是晴天的概率是0.5,雨天的概率是0.5。

P = array([[0.9, 0.5], [0.1, 0.5]])    #转移矩阵

#假设第一天是晴天
Init_State = array([[1], [0]])   #初始状态分布

n = 30    #预测n天的事件发生概率
for i in range(n):
    S = dot(P, Init_State)    #dot()是点乘函数
    print(f'第{i+2}天天气概率分布:{S.T}')    #T的作用是将矩阵转置,将n*1变为1*n
    Init_State = S

结果:

2天天气概率分布:[[0.9 0.1]]3天天气概率分布:[[0.86 0.14]]4天天气概率分布:[[0.844 0.156]]5天天气概率分布:[[0.8376 0.1624]]6天天气概率分布:[[0.83504 0.16496]]7天天气概率分布:[[0.834016 0.165984]]8天天气概率分布:[[0.8336064 0.1663936]]9天天气概率分布:[[0.83344256 0.16655744]]10天天气概率分布:[[0.83337702 0.16662298]]11天天气概率分布:[[0.83335081 0.16664919]]12天天气概率分布:[[0.83334032 0.16665968]]13天天气概率分布:[[0.83333613 0.16666387]]14天天气概率分布:[[0.83333445 0.16666555]]15天天气概率分布:[[0.83333378 0.16666622]]16天天气概率分布:[[0.83333351 0.16666649]]17天天气概率分布:[[0.8333334 0.1666666]]18天天气概率分布:[[0.83333336 0.16666664]]19天天气概率分布:[[0.83333334 0.16666666]]20天天气概率分布:[[0.83333334 0.16666666]]21天天气概率分布:[[0.83333334 0.16666666]]22天天气概率分布:[[0.83333333 0.16666667]]23天天气概率分布:[[0.83333333 0.16666667]]24天天气概率分布:[[0.83333333 0.16666667]]25天天气概率分布:[[0.83333333 0.16666667]]26天天气概率分布:[[0.83333333 0.16666667]]27天天气概率分布:[[0.83333333 0.16666667]]28天天气概率分布:[[0.83333333 0.16666667]]29天天气概率分布:[[0.83333333 0.16666667]]30天天气概率分布:[[0.83333333 0.16666667]]31天天气概率分布:[[0.83333333 0.16666667]]

例子

参考这篇文章马尔科夫链(Markov chain)5分钟简单入门中的例子

有一个大的汽车租赁公司,有三家门店,你租的时候可以选择任何一个门店,还的时候也可以选择任何一家门店, 从不同门店借出和归还的概率如下:
在这里插入图片描述
假设用户最开始从2号店借出车,十五次借还以后,这辆车最可能在哪个门店呢?
用python实现15次借还后的预测:

#离散状态马尔可夫链
from numpy import *

P = array([[0.5, 0.3, 0.3], [0.2, 0.1, 0.6], [0.3, 0.6, 0.1]])    #转移矩阵

Init_State = array([[0], [1], [0]])   #初始状态分布

n = 15    #预测n天的事件发生概率
for i in range(1,n):
    S = dot(P, Init_State)    #dot()是点乘函数
    print(f'第{i}次借还后该车在某号店的概率分布:{S.T}')    #T的作用是将矩阵转置,将n*1变为1*n
    Init_State = S

结果:

1次借还后该车在某号店的概率分布:[[0.3 0.1 0.6]]2次借还后该车在某号店的概率分布:[[0.36 0.43 0.21]]3次借还后该车在某号店的概率分布:[[0.372 0.241 0.387]]4次借还后该车在某号店的概率分布:[[0.3744 0.3307 0.2949]]5次借还后该车在某号店的概率分布:[[0.37488 0.28489 0.34023]]6次借还后该车在某号店的概率分布:[[0.374976 0.307603 0.317421]]7次借还后该车在某号店的概率分布:[[0.3749952 0.2962081 0.3287967]]8次借还后该车在某号店的概率分布:[[0.37499904 0.30189787 0.32310309]]9次借还后该车在某号店的概率分布:[[0.37499981 0.29905145 0.32594874]]10次借还后该车在某号店的概率分布:[[0.37499996 0.30047435 0.32452569]]11次借还后该车在某号店的概率分布:[[0.37499999 0.29976284 0.32523717]]12次借还后该车在某号店的概率分布:[[0.375      0.30011858 0.32488142]]13次借还后该车在某号店的概率分布:[[0.375      0.29994071 0.32505929]]14次借还后该车在某号店的概率分布:[[0.375      0.30002965 0.32497035]]15次借还后该车在某号店的概率分布:[[0.375      0.29998518 0.32501482]]

4.2 平稳分布

在这里插入图片描述
直观上,如果马尔可夫链的平稳分布存在,那么以该平稳分布作为初始分布,面向未来进行随机状态转移,之后任何一个时刻的状态分布都是该平稳分布。
在这里插入图片描述
在这里插入图片描述
引理19.1给出一个求马尔可夫链平稳分布的方法。

例题

在这里插入图片描述
在这里插入图片描述

from sympy import *
x1, x2, x3 = symbols('x1, x2, x3')
I = x1 + x2 + x3 -1
P = Matrix([[1/2, 1/2, 1/4], [1/4, 0, 1/4], [1/4, 1/2, 1/2]])
S = Matrix([[x1], [x2], [x3]])

print(solve([P*S-S, I],[x1,x2,x3]))

结果:

{x3: 0.400000000000000, x2: 0.200000000000000, x1: 0.400000000000000}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

from sympy import *
x1, x2, x3 = symbols('x1, x2, x3')
I = x1 + x2 + x3 -1
P = Matrix([[1, 1/3, 0], [0, 1/3, 0], [0, 1/3, 1]])
S = Matrix([[x1], [x2], [x3]])

print(solve([P*S-S, I],[x1,x2,x3]))

结果:

{x2: 0.0, x1: 1.0 - x3}

由上面这个例子可知:
马尔可夫链可能存在唯一平稳分布,无穷多个平稳分布,或不存在平稳分布。

五、连续状态马尔可夫链

连续状态马尔可夫链 X = {X0,X1,……,Xt,……},随机变量Xt(t=0,1,2,……)定义在连续状态空间S,转移概率分布由概率转移核或转移核(transition kernel)表示。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 19
    点赞
  • 195
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值