马尔可夫链 ▏小白都能看懂的马尔可夫链详解

本文介绍了马尔可夫链的基本概念及其在机器学习中的应用。通过实例详细讲解了状态转移矩阵及马尔可夫链的收敛性质。
AI助手已提取文章相关产品:

1.什么是马尔可夫链

在机器学习算法中,马尔可夫链(Markov chain)是个很重要的概念。马尔可夫链(Markov chain),又称离散时间马尔可夫链(discrete-time Markov chain),因俄国数学家安德烈·马尔可夫(俄语:Андрей Андреевич Марков)得名,为状态空间中经过从一个状态到另一个状态的转换的随机过程。该过程要求具备“无记忆”的性质:下一状态的概率分布只能由当前状态决定,在时间序列中它前面的事件均与之无关。这种特定类型的“无记忆性”称作马尔可夫性质。马尔科夫链作为实际过程的统计模型具有许多应用。

在马尔可夫链的每一步,系统根据概率分布,可以从一个状态变到另一个状态,也可以保持当前状态。状态的改变叫做转移,与不同的状态改变相关的概率叫做转移概率。随机漫步就是马尔可夫链的例子。随机漫步中每一步的状态是在图形中的点,每一步可以移动到任何一个相邻的点,在这里移动到每一个点的概率都是相同的(无论之前漫步路径是如何的)。

2.一个经典的马尔科夫链实例

用一句话来概括马尔科夫链的话,那就是某一时刻状态转移的概率只依赖于它的前一个状态。

举个简单的例子,假如每天的天气是一个状态的话,那个今天是不是晴天只依赖于昨天的天气,而和前天的天气没有任何关系。

这么说可能有些不严谨,但是这样做可以大大简化模型的复杂度,因此马尔科夫链在很多时间序列模型中得到广泛的应用,比如循环神经网络RNN,隐式马尔科夫模型HMM等。

假设状态序列为

c66caa6a5c329ecc9b185218963b5bf4.png

由马尔科夫链定义可知,

时刻Xt+1 的状态只与Xt 有关,用数学公式来描述就是:

7e3105541f40ac1ef8cac1fc57143a67.png

既然某一时刻状态转移的概率只依赖前一个状态,那么只要求出系统中任意两个状态之间的转移概率,这个马尔科夫链的模型就定了。看一个具体的例子。

5ee4915b27f9eabe3998ba8f7f9dfccc.png

这个马尔科夫链是表示股市模型的,共有三种状态:牛市(Bull market), 熊市(Bear market)和横盘(Stagnant market)。

每一个状态都以一定的概率转化到下一个状态。比如,牛市以0.025的概率转化到横盘的状态。这个状态概率转化图可以以矩阵的形式表示。如果我们定义矩阵阵P某一位置P(i, j)的值为P(j|i),即从状态i变为状态j的概率。另外定义牛市、熊市、横盘的状态分别为0、1、2,这样我们得到了马尔科夫链模型的状态转移矩阵为:

4ffb193a59ac45287acb990b9f071a13.png

当这个状态转移矩阵P确定以后,整个股市模型就已经确定!

3.状态转移矩阵

从上面的例子不难看出来,整个马尔可夫链模型的核心是状态转移矩阵P。那这个矩阵P有一些什么有意思的地方呢?接下来再看一下。

以股市模型为例,假设初始状态为t0=[0.1,0.2,0.7] ,然后算之后的状态。

44525c2681809ed9cb69661906f092c4.png

最终输出结果为

401643bd3a526339d39cc3cd1940f563.png

从第18次开始,状态就开始收敛至[0.624,0.312,0.0625] 。最终数字上略有不同,只是计算机浮点数运算造成的罢了。

如果我们换一个初始状态t0 ,比如[0.2,0.3.0.5] 继续运行上面的代码,只是将init_array变一下,最后结果为:

f97ad56d1115b06e277dfa9be5107974.png

到第18次的时候,

又收敛到了[0.624,0.312,0.0625] 

这个转移矩阵就厉害了。不管我们的初始状态是什么样子的,只要状态转移矩阵不发生变化,当n→∞ 时,最终状态始终会收敛到一个固定值。

在矩阵分析,自动控制原理等过程中,经常会提到矩阵的幂次方的性质。我们也看看这个状态转移矩阵P的幂次方有什么有意思的地方?直接上代码。

4011dfdbdae1b5a7ddc36b5bcfbbbda3.png

代码运行结果为

3779c1e17e7d5650e9b7724038252609.png

b9c1a981a51fd7103aa724aca7d6c664.png

b309d3dc636c098fab07d4b5a430f6b1.png

从第20次开始,结果开始收敛,并且每一行都为[0.625,0.312,0.0625] 。

4.马尔可夫链细致平稳条件

首先,马尔科夫链要能收敛,需要满足以下条件:

1.可能的状态数是有限的。

2.状态间的转移概率需要固定不变。

3.从任意状态能够转变到任意状态。

4.不能是简单的循环,例如全是从x到y再从y到x。

以上是马尔可夫链收敛的必要条件。

假设有一个概率的单纯形向量

a4c9d502d20b1e5bf6b0641de792d602.png

有一个概率转移矩阵P PP,例如我们前面的例子:

ae8609b929e1041afdb77d66d8c8785c.png

其中,v0 每个元素的取值范围为[0,1],并且所有元素的和为1。而P 的每一行也是个概率单纯形向量。

由前面的例子我们不难看出,当v0 与P 的n次幂相乘以后,发现得到的向量都会收敛到一个稳定值,而且此稳定值与初始向量v0 无关!

那么所有的转移矩阵P 都有这种现象嘛?或者说满足什么样的条件的转移矩阵P会有这种现象?

细致平衡条件(Detailed Balance Condition):给定一个马尔科夫链,分布π和概率转移矩阵P,如果下面等式成立:

c109138aadc7072c6c65537cad277e48.png

则此马尔科夫链具有一个平稳分布(Stationary Distribution)。

证明过程比较简单:

967b5a04e949b385a2ef8acd834aa289.png

上式取j→∞ ,就可以得到矩阵表达式:

b5b59389a3ac08ff7d3e645d32bc2473.png

5.马尔可夫链收敛性质

如果一个非周期的马尔可夫链收敛,有状态转移矩阵P,并且任何两个状态都是连通的,那么

8d79b071714c07b8bd7977417947cc89.png

π是方程πP=π 的唯一非负解,其中:

73757b7d1e24be146c276a806810f5ad.png

•  END  •

文章来源:优快云博主「bitcarmanlee」

原文链接:https://blog.youkuaiyun.com/bitcarmanlee/java/article/details/82819860

您可能感兴趣的与本文相关内容

马尔可夫链(Markov chain)是一种重要的概率模型,属于离散时间随机过程的一种。其核心特征是具备“无记忆性”,即下一状态的概率分布仅由当前状态决定,与之前的状态无关。这种性质被称为马尔可夫性质[^4]。 在数学定义上,设有一个状态集合 $ S = \{s_1, s_2, ..., s_n\} $ 和一个转移矩阵 $ P = [p_{ij}] $,其中 $ p_{ij} $ 表示从状态 $ s_i $ 转移到状态 $ s_j $ 的概率。若该过程满足: $$ P(X_{t+1} = s_j | X_t = s_i, X_{t-1} = s_k, \dots) = P(X_{t+1} = s_j | X_t = s_i) $$ 则称此过程为马尔可夫链。 ### 应用场景 #### 自然语言理解 马尔可夫链广泛应用于自然语言处理领域,尤其是语言模型的构建。通过建模句子中词语之间的转移概率,可以预测下一个可能出现的词,从而提升文本生成、拼写纠错等任务的效果[^1]。 #### 语音识别 在语音识别系统中,马尔可夫链用于建模语音信号中的时序结构,帮助识别连续语音流中对应的音素或单词序列。通过分析相邻状态之间的关系,提高识别的准确性[^2]。 #### 隐马尔可夫模型(HMM) 隐马尔可夫模型是一种扩展形式,包含可观测状态和隐藏状态。它在语音识别、生物信息学中的DNA序列分析等领域有广泛应用。例如,在语音识别中,观测值可能是声学特征,而隐藏状态代表实际的音素或词汇单元[^3]。 #### N元语法 在NLP中,N元语法(如二元语法、三元语法)是基于马尔可夫链建立的语言模型。例如,二元语法假设当前词只依赖于前一个词,这正好符合一阶马尔可夫链的特性[^5]。 #### 其他应用 马尔可夫链还被用于网页排名算法(如Google的PageRank)、金融建模、排队论、天气预测等多个领域。 ### 示例代码:一阶马尔可夫链生成文本 以下是一个简单的Python实现,使用一阶马尔可夫链进行文本生成: ```python import random from collections import defaultdict # 构建转移矩阵 def build_markov_chain(text, order=1): chain = defaultdict(list) words = text.split() for i in range(len(words) - order): current_state = words[i] next_state = words[i + 1] chain[current_state].append(next_state) return chain # 生成文本 def generate_text(chain, start_word, length=20): current_word = start_word result = [current_word] for _ in range(length - 1): next_words = chain.get(current_word) if not next_words: break current_word = random.choice(next_words) result.append(current_word) return ' '.join(result) # 示例文本 text = "the cat sat on the mat and the dog sat on the rug" chain = build_markov_chain(text) generated = generate_text(chain, "the", length=10) print(generated) ``` 该程序将根据给定文本构建状态转移表,并模拟一个简单的一阶马尔可夫链来生成新文本。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值