简单(非隐藏)马尔可夫链的前向/后向算法

时间:2018-05-07 10:46:11

标签: algorithm markov-chains

给出初始转换矩阵

enter image description here

其中x是随机步行者开始行走的初始节点。

然后我们可以计算数量:

enter image description here

表示在步行长度为L的情况下,在x中开始步行时访问边缘(i,j)的预期次数。

由于像Q ^(L-1)这样的矩阵供电,上述数量的计算是非常耗时的,我想知道是否存在类似于HMM的前向 - 后向算法的算法以便计算该数量对于那个简单的(可见的)马尔可夫链。

1 个答案:

答案 0 :(得分:1)

针对这些问题,markov模型有一些技巧。

在您的情况下,我假设您希望给定

的特定边i,j被访问的预期次数
  1. 转移概率矩阵 P
  2. 所有链条均始于 x
  3. 所有链的长度为 L

我将忽略任何类似P的特殊形式,这可能会进一步提高速度。总体思路(可以扩展到有关markov系统的其他问题)是

首先,我们意识到,如果我们知道对边缘开始的状态的实际访问次数,则可以使用过渡矩阵 P 来推断特定边缘的实际计数。 / p>

示例:说说长度为50的链,我们知道平均处于状态1的10倍。在P中,从1跳到2的机会是50%。然后在长度为50 + 1的链中,我们发现平均所有边缘的10 * 50%= 5为1->2。(请注意状态访问和边缘访问之间的区别!)

幸运的是,可以以过渡矩阵的几何序列的形式来写期望状态。只要分母可以倒置,就可以对几何序列使用通常的技巧,但很遗憾,过渡矩阵不是这样。至少不是很简单,但这可以解决。

让我用LaTeX写下状态访问向量的数量

E_c{x_0,L} = \sum_{i=0}^{L-1} P^i x_0 = (\sum_{i=0}^{L-1} P^i) x_0

其中x_0是向量,在您的情况下,初始分布在所有位置均为零,但您选择的是一种状态。

请注意,x_0之前的总和是一个矩阵,其中包含所有可能的初始状态的所有状态计数。现在计算这个矩阵。使用几何级数我们得到

\sum_{i=0}^{L-1} P^i = \frac{P^L - Id}{P - Id}

具有ID的身份矩阵。分母是单数,所以我们有问题。幸运的是分子有相同的问题,因此我们可以解决此问题。使用特征值分解并使用左右特征向量矩阵和特征值evD的对角矩阵重写P

P = evR evD evL

\sum_{i=0}^{L-1} P^i = \sum_{i=0}^{L-1} (evR evD evL)^i 
                     = evR (\sum_{i=0}^{L-1} evD^i ) evL

现在,我们为每个特征值保留简单的几何级数。一个特征值是1,这会引起问题。但是在这种情况下,我们只是总结一下。从0到L-1求和1就是L。其他几何级数定义明确。

专业人士:现在,您可以立即计算x_0或L的任意选择的边缘。

缺点:您总是必须进行特征分解,但是如果矩阵很大,这是一个问题。

示例:

一个简单的偶对称矩阵

P = {{0.8,   0.15, 0.05}, 
     {0.075, 0.85, 0.075}, 
     {0.05,  0.15, 0.8}}

我们选择了L = 51(50个转换)和x_0 = {1, 0, 0}

evD = {{1., 0., 0.}, {0., 0.75, 0.}, {0., 0., 0.7}}
evR = {{-0.612372, -0.707107, 0.612372}, {-0.612372, 0, -0.612372}, {-0.612372, 0.707107, 0.612372}}
evL = {{-0.408248, -0.816497, -0.408248}, {-0.707107, 0, 0.707107}, {0.408248, -0.816497, 0.408248}}

GeometricSeries(evD,50) = {{50., 0., 0.}, {0., 4., 0.}, {0., 0., 3.33333}}

E_c(x_0 = 1) = evR GeometricSeries(evD,50) evL {1, 0, 0}
             = {15.3333, 11.6667, 11.3333}

对于过渡1-> 2(15%),我们得到15.3333 * 15%= 2.3