张芷铭的个人博客

马尔可夫链

马尔可夫链 (Markov Chain)

定义

马尔可夫链是一种随机过程,具有无记忆性的特性,也就是说,未来的状态仅与当前状态有关,而与历史状态无关。具体来说,若我们把系统的状态表示为一系列随机变量,那么马尔可夫链的关键特性是:系统从一个状态转移到下一个状态的概率仅取决于当前状态,而与如何到达当前状态无关。

数学表示

假设我们有一个状态空间 S={s1,s2,…,sn}S = {s_1, s_2, \dots, s_n}S={s1​,s2​,…,sn​},并且每个状态都有一个转移概率矩阵 PPP 来表示从一个状态转移到另一个状态的概率。

如果状态 XtX_tXt​ 表示系统在时刻 ttt 的状态,那么马尔可夫性质可以用以下公式表示:

P(Xt+1=sj∣Xt=si,Xt−1=si−1,…,X0=s0)=P(Xt+1=sj∣Xt=si)P(X_{t+1} = s_j | X_t = s_i, X_{t-1} = s_{i-1}, \dots, X_0 = s_0) = P(X_{t+1} = s_j | X_t = s_i)P(Xt+1​=sj​∣Xt​=si​,Xt−1​=si−1​,…,X0​=s0​)=P(Xt+1​=sj​∣Xt​=si​)

这表示系统从状态 sis_isi​ 转移到状态 sjs_jsj​ 的概率,只依赖于当前的状态 sis_isi​,而与之前的状态无关。

转移概率矩阵

假设状态空间有 nnn 个状态,那么转移概率矩阵 PPP 是一个 n×nn \times nn×n 的矩阵,其中第 iii 行第 jjj 列的元素 PijP_{ij}Pij​ 表示从状态 sis_isi​ 转移到状态 sjs_jsj​ 的概率。

P=(P11P12…P1nP21P22…P2n⋱Pn1Pn2…Pnn)P = \begin{pmatrix} P_{11} & P_{12} & \dots & P_{1n} \ P_{21} & P_{22} & \dots & P_{2n} \ \vdots & \vdots & \ddots & \vdots \ P_{n1} & P_{n2} & \dots & P_{nn} \end{pmatrix}P=​P11​P21​⋮Pn1​​P12​P22​⋮Pn2​​……⋱…​P1n​P2n​⋮Pnn​​​

其中:

  • Pij≥0P_{ij} \geq 0Pij​≥0 且 ∑j=1nPij=1\sum_{j=1}^{n} P_{ij} = 1∑j=1n​Pij​=1(每行的概率和为 1)。

马尔可夫链的类型

  1. 离散时间马尔可夫链 (DTMC): 在这种类型的马尔可夫链中,时间是离散的,即系统的状态在离散的时间步长上转移。

  2. 连续时间马尔可夫链 (CTMC): 这种类型的马尔可夫链中,时间是连续的,状态转移的发生是在某个随机时间点。

马尔可夫链的性质

  1. 平稳分布:马尔可夫链可能会收敛到一个稳定的分布,即当时间足够长时,系统的状态分布趋于平稳。这个分布称为平稳分布,在这种分布下,系统的状态不再随着时间变化。

  2. 遍历性:如果一个马尔可夫链是遍历的(ergodic),那么它的平稳分布是唯一的,并且可以通过长时间模拟得到。

  3. 周期性:如果从任意状态出发,回到该状态的时间间隔可以被固定的整数倍表示,则该马尔可夫链具有周期性。如果每次从某个状态出发都可以回到该状态,且时间间隔不固定,则该马尔可夫链是非周期性的。

例子

  1. 天气模型: 假设天气有两种状态:晴天和雨天。天气在今天的状态会影响明天的状态。假设从晴天到晴天的概率是 0.8,从晴天到雨天的概率是 0.2;从雨天到晴天的概率是 0.5,从雨天到雨天的概率是 0.5。那么,转移概率矩阵可以表示为:

    P=(0.80.20.50.5)P = \begin{pmatrix} 0.8 & 0.2 \ 0.5 & 0.5 \end{pmatrix}P=(0.80.5​0.20.5​)

  2. 网页浏览模型: 假设你在浏览网页,网页的状态是由用户访问的不同页面组成。每个页面的转移概率表示用户从当前页面跳转到另一个页面的概率。你可以通过马尔可夫链来建模这一过程,分析哪些页面最有可能被访问。

Python 实现

下面是一个简单的马尔可夫链模拟,假设系统有两个状态,状态转移矩阵已经给出:

python

复制代码

import numpy as np # 定义转移概率矩阵 P = np.array([[0.8, 0.2], [0.5, 0.5]]) # 初始状态概率 initial_state = np.array([1, 0]) # 假设初始状态为晴天 # 模拟状态转移 def markov_chain(P, initial_state, steps): state = initial_state states = [] for _ in range(steps): state = np.dot(state, P) # 状态转移 states.append(state) return np.array(states) # 运行马尔可夫链模拟,模拟 10 天 steps = 10 states = markov_chain(P, initial_state, steps) # 输出结果 for i, state in enumerate(states): print(f"Day {i+1}: Sunny: {state[0]:.4f}, Rainy: {state[1]:.4f}")

输出示例:

yaml

复制代码

Day 1: Sunny: 1.0000, Rainy: 0.0000 Day 2: Sunny: 0.8000, Rainy: 0.2000 Day 3: Sunny: 0.7600, Rainy: 0.2400 Day 4: Sunny: 0.7520, Rainy: 0.2480 Day 5: Sunny: 0.7512, Rainy: 0.2488 ...

应用领域

  1. 自然语言处理:马尔可夫链广泛应用于语言模型中,尤其是n-gram模型,用于生成和预测文本。

  2. 金融工程:用来建模股价变化、投资组合等的状态转移过程。

  3. 生物信息学:在基因组学中,马尔可夫链被用于基因序列的建模和分析。

  4. 人工智能:在强化学习中,马尔可夫决策过程 (MDP) 使用马尔可夫链来描述智能体的行为过程。

总结

马尔可夫链是随机过程中的一种重要模型,适用于描述许多实际系统的行为,尤其是那些状态仅依赖于当前状态的过程。通过理解其转移概率矩阵以及模拟其状态变化,我们可以有效地预测系统的未来行为,并且能够在多个领域中找到应用。

💬 评论