1. 马尔可夫家族:从“健忘”的随机过程说起
想象一下,你正在观察一个非常健忘的朋友每天的“状态”。他今天的心情是“开心”,那么他明天的心情会怎样?如果他的健忘程度达到了一个极端——明天的心情只取决于今天的心情,而完全忘记了昨天、前天乃至更早的所有事情——那么恭喜你,你刚刚理解了马尔可夫性的核心思想。这种“无记忆性”或者说“健忘性”,正是整个马尔可夫家族理论的基石。
我第一次接触这个概念是在做一个简单的天气预测小项目时。当时我想,预测明天下不下雨,是不是得分析过去一周、甚至一个月的天气数据?理论上是这样,但计算量会非常庞大。后来我发现,如果引入“马尔可夫假设”,问题就简单多了:我们假设明天的天气只依赖于今天的天气。这样一来,模型瞬间变得清晰可控。虽然这个假设听起来有点“偷懒”,不符合现实(天气确实会受到更早历史的影响),但在很多场景下,它作为一个强有力的近似,效果出奇地好,而且计算上可行。
那么,这个“家族”里都有谁呢?最基础的是马尔可夫链,它描述的是状态本身随时间演变的随机过程。然后是马尔可夫模型,这是一个更宽泛的框架,马尔可夫链是它的一个具体实例。最后是家族中的“明星成员”——隐马尔可夫模型。它更“狡猾”一些:我们无法直接看到状态(比如天气),只能看到由这些状态产生的一些“表现”或“证据”(比如海藻的干燥程度、人们穿的衣服)。我们的任务就是通过这些可见的“表现”,去推测背后不可见的“状态”序列。
理解这三者的关系和区别,就像是掌握了一套从简单到复杂、从观察到推理的思维工具。它们不仅在天气预报、股票分析(价格涨跌序列)等传统领域大放异彩,更是现代语音识别、自然语言处理(比如词性标注、命名实体识别)、生物信息学(基因序列分析)等前沿技术的核心引擎。接下来,我们就从最基础的马尔可夫链开始,一步步拆解这个家族的奥秘。
2. 马尔可夫链:一个“活在当下”的随机漫步者
2.1 核心原理:未来只与现在有关
让我们用王二狗的例子再具体化一下。假设王二狗每天中午只有三种状态:吃、玩、睡。我们记录了他一个月的行为,发现了一些规律:
- 如果今天在“吃”,那么明天有50%的概率继续“吃”,30%的概率去“玩”,20%的概率去“睡”。
- 如果今天在“玩”,那么明天有20%的概率去“吃”,60%的概率继续“玩”,20%的概率去“睡”。
- 如果今天在“睡”,那么明天有10%的概率去“吃”,30%的概率去“玩”,60%的概率继续“睡”。
这些概率关系,我们可以用一个矩阵清晰地表示出来,这就是状态转移概率矩阵:
| 今天状态 \ 明天状态 | 吃 | 玩 | 睡 |
|---|---|---|---|
| 吃 | 0.5 | 0.3 | 0.2 |
| 玩 | 0.2 | 0.6 | 0.2 |
| 睡 | 0.1 | 0.3 | 0.6 |
这个矩阵的每一行之和都是1,因为从任何一个状态出发,第二天必然转移到这三个状态之一。现在,假设我们知道4月1号中午,王二狗的状态分布是 [0.6, 0.2, 0.2](即60%可能在吃,20%在玩,20%在睡)。那么4月2号的状态分布怎么算?
很简单,就是今天的分布向量乘以转移矩阵: S2 = S1 * P = [0.6, 0.2, 0.2] * P
计算一下:第二天“吃”的概率 = 0.60.5 + 0.20.2 + 0.2*0.1 = 0.3 + 0.04 + 0.02 = 0.36。同理可以算出“玩”和“睡”的概率。以此类推,第三天 S3 = S2 * P,第四天 S4 = S3 * P... 你会发现,第N天的状态,只取决于第N-1天的状态,与更早的历史无关。这就是马尔可夫链的精髓:它用一个简单的矩阵乘法,描述了系统随时间的演化。
2.2 稳态分布:时间够长,终归平静
一个有趣的现象是,对于许多马尔可夫链,无论初始状态如何,经过足够长的时间后,状态分布会趋于一个稳定的值,不再随时间变化。这个稳定的分布叫做稳态分布或平稳分布。
还用王二狗的例子,如果我们不断地用转移矩阵P去乘一个分布向量,比如从 [0.1, 0.2, 0.7] 开始迭代计算很多天(比如100天)后的状态,你会发现数字逐渐稳定在 [约0.324, 约0.294, 约0.382] 附近。即使你换一个完全不同的初始分布,比如 [1, 0, 0](100%在吃),最终也会收敛到同一个稳定分布。
这个性质非常强大。它意味着从长期来看,系统在各个状态上花费的时间比例是固定的。在实际应用中,比如网页排名算法PageRank,它将互联网网页看作状态,链接看作转移概率,通过计算稳态分布来确定每个网页的“重要性”排名。稳态分布就是那个最终的、稳定的排名结果。
下面我们用Python代码来模拟这个过程,看看收敛的效果:
import numpy as np
# 定义转移概率矩阵
P = np.array([[0.5, 0.3, 0.2],
[0.2, 0.6, 0.2],

2187

被折叠的 条评论
为什么被折叠?



