NLP 《马尔科夫链》

定义:是一个离散的随机过程,状态的变化都是依赖于状态转移矩阵,用来描述状态空间中经过从一个状态到另一个状态的转换的随机过程,用图的形式表示如下,下图是截图别人的。
在这里插入图片描述

马尔科夫链是基于两个假设:
有限视野假设:也就是马尔科夫假设,回想到之前学习的Bi-gram,跟这个含义是一样的,每一时刻的状态只和上一时间的状态有关,与更之前时刻的状态没有直接联系。

时间独立性:在转移矩阵里面,让一个点随机进行漫步,不论到什么时间,状态转移概率都是保持不变的,不随着时间的变化而变化,因此状态矩阵和时间没有关系。

在这里插入图片描述

加入上图所示:总共俩状态A和B。
模型表示为:λ = (S,A,π)
S:假设一共有N个状态的集合,而在每个时刻只可能处于一个状态,所有可能的状态集合用S = {S1, S2, S3, ⋯ , SN} 表示。T表示一共有T个时刻,用q1, q2, q3, ⋯ , qT表示在时刻t = 1,2,⋯,T时的状态。

A:表示转移矩阵,Aij 表示P(qt = Sj | qt-1 = Si)表示qt-1时刻的Si到qt时刻的Sj转移概率。

π:在途中没有画出来,表示初始状态start到各个状态S的概率转移向量(从外部初始状态进入这个链内的的过程),也就是q0时刻的start到q1时刻的Si转移概率,用P(q1 = Si | q0 = start)表示。

因此两个假设用式子表示就是:
有限视野:P(qt |q1, q2, q3, ⋯ , qt-1) = P(qt | qt-1)
时间独立性:P(qt = Sj | qt-1= Si) = P(qk = Sj | qk-1= Si)

我们看一下这个状态转移矩阵的特点,假如有一下转移矩阵:
在这里插入图片描述

看他的一个有趣的特点:
1:给定一个初始状态π=(0.1, 0.4, 0.5),计算π* A^N

A = [[0.6, 0.3, 0.1]; [0.2, 0.5, 0.3]; [0.4, 0.2, 0.4]]
pai = [0.1, 0.4, 0.5]
B = pai * eye(3,3)
for x=1:50
	B = B * A;
	disp(['itr------', num2str(x)])
	B
end;

在这里插入图片描述

在第九次就开始收敛到[0.41379 0.34483 0.24138]

2:换个值看看。初始状态π=(0.6, 0.1, 0.3)

A = [[0.6, 0.3, 0.1]; [0.2, 0.5, 0.3]; [0.4, 0.2, 0.4]]
pai = [0.6, 0.1, 0.3]
B = pai * eye(3,3)
for x=1:50
   B = B * A;
   disp(['itr------', num2str(x)])
   B
end;

在这里插入图片描述

也在第九次就开始收敛到[0.41379 0.34483 0.24138]

3:我们求A的幂次方看看,计算A^N

A = [[0.6, 0.3, 0.1]; [0.2, 0.5, 0.3]; [0.4, 0.2, 0.4]]
B = eye(1,1)
for x=1:50
	B = B * A;
	disp(['itr------', num2str(x)])
	B
end;

在这里插入图片描述

差不多也是在第11次矩阵运算的时候,收敛于
在这里插入图片描述

因此,马尔可夫链的状态转移矩阵具有收敛到某个值的特点,这让我想起来了pagerank算法,就是根据网页的出度入度,计算网页价值,也是用的这样的计算方式,最后收敛与一个向量,就是网页的排名评分。具体的数学证明过程,以及转移矩阵的收敛条件是什么,我这里就不展开写了,有兴趣可以自行查阅资料哈。

本文学习来自:
http://zhouyichu.com/nlp/Hidden-Markov-Model/
https://blog.csdn.net/bitcarmanlee/article/details/82819860

学习马尔科夫链的目的是因为它是HMM的基础,是绕不开的模型,完全是为了给学习HMM做铺垫的,必须要明白它是什么,以及它的模型的组成。

下一篇文章我们将要学习到HMM,隐式马尔科夫链,是一个比马尔科夫链功能更加强大的模型。

猜你喜欢

转载自blog.csdn.net/qq_29367075/article/details/109089445