马尔可夫链是一种相当常见的、相对简单的统计模型随机过程的方法。它们已经被应用于许多不同的领域,从文本生成到金融建模。一个常见的例子是r/SubredditSimulator,它使用马尔可夫链来自动创建整个subreddit的内容。总的来说,马尔可夫链在概念上是相当直观的,并且非常容易理解,因为它们可以在不使用任何高级统计或数学概念的情况下实现。它们是学习概率建模和数据科学技术的好方法。
r/SubredditSimulator地址:https://www.reddit.com/r/SubredditSimulator/
首先,我将用一个非常常见的例子来描述它们:
假设天气有两种可能的状态:晴天或阴天。你可以直接观察当前的天气状态,并且保证始终是前面提到的两个状态之一。
现在,你想要预测明天的天气。直觉上,你假设在这个过程中有一个内在的转移,因为当前的天气对第二天的天气有一定的影响。所以,作为尽职尽责的人,你收集了数年的天气数据,并计算出在阴天之后的晴天的概率是0.25。你还注意到,通过类推,可以得出在阴天之后出现阴天的概率必须是0.75,因为天气只有两个可能的状态。
你现在可以利用这个分布,根据当时的天气状况来预测未来几天的天气。
这个例子说明了马尔可夫链的许多关键概念。马尔可夫链本质上由一组转移组成,这些转移由一些满足马尔可夫性质的概率分布决定。
在这个例子中,通过观察从当前的一天到下一天的过渡,得到的概率分布。这说明了马尔可夫属性,马尔可夫过程的独特特征,使它们无记忆。这通常会使他们无法成功地产生一些潜在趋势可能会发生的序列。例如,虽然马尔可夫链可以基于单词频率来模仿作者的写作风格,但是由于这些是经过更长的文本序列开发的,因此无法产生包含深层含义或主题意义的文本。它们缺乏产生与上下文相关的内容的能力,因为他们无法将之前的所有状态考虑在内。
天气可视化的例子
示例:马尔可夫链的一般视图
示例:转移矩阵有3个可能的状态
初始状态向量有4个可能的状态
模型和场景通常是表示马尔可夫链所需的全部。
我们现在知道了如何获得从一个状态转移到另一个状态的机会,但是如何找到在多个步骤中找到转移的机会呢?为了使它正式化,我们现在想要确定在M步中从状态I转移到状态J的概率。事实证明,这其实很简单。给定一个转移矩阵P,这可以通过提高P的M次幂来计算矩阵条目(I,J)的值来确定,对于M的小值,可以通过重复的乘法运算手动实现。然而,对于M的大值,如果你熟悉简单的线性代数,将矩阵对角化是更有效的方法。
现在你已经了解了马尔可夫链的基本知识,现在你应该能够轻松地用你选择的语言实现它们。如果编码不是你的强项,那么还有很多更高级的马尔可夫链和马尔可夫过程的特征可以去深入研究。在我看来,沿着理论路线的自然前进方向是隐藏的马尔可夫过程或MCMC。简单的马尔可夫链是其他更复杂的建模技术的构建模块,因此,通过这些知识,你现在可以在诸如信念建模和取样等主题中使用各种技术。