首页 > 解决方案 > 有限 HMM 及其 Digamma 矩阵

问题描述

我已经开始学习我的教科书 3 天以及补充的 Matlab 代码,我根本不了解当转换矩阵具有退出状态时 Gamma 矩阵的外观。

通常,digamma 会有 t-1 个元素,每个元素都是转换矩阵维度的矩阵(对吗?Digamma_t_ij)......所以,假设我的玩具示例是

A = [[0.9, 0.1, 0.0],
     [0.0, 0.9, 0.1]]

x = [-0.2, 2.6, 1.3]

状态 1 和 2 的排放概率由高斯分布建模。我暂时不考虑 r ,即几个序列。

在我看来,digamma 应该具有np.zeros((sequence_length, self.nStates, len(self.nStates + 1 )))+1 表示退出状态的形状......

虽然,这是我教科书中的一个尝试:

在此处输入图像描述

“因此,我们用一个额外的列来补充 ξr 矩阵”,如何......什么......我觉得很愚蠢:(

这就是我得到的atm

Digamma
array([[[0.06495786, 0.93504214, 0.        ],
        [0.        , 0.        , 0.        ]],

       [[0.        , 0.06495786, 0.        ],
        [0.        , 0.93504214, 0.        ]],

       [[0.        , 0.        , 0.        ],
        [0.        , 0.        , 0.        ]]])

我猜前两个元素是正确的,因为每个矩阵中的值加起来为 1,因此更改它们的结束列似乎是错误的......但填充最后一个矩阵似乎也不正确?

我将添加计算 digamma 所需的所有变量,以防有人可以向我解释这一点并且不想提出一个玩具示例:

# a_pass from the Forward Algorithm
a_pass = array([[1.        , 0.38470424, 0.41887466],
                [0.        , 0.61529576, 0.58112534]])
# b_pass from the Backward Algorithm
b_pass = array([[1.        , 1.03893571, 0.        ],
                [8.41537925, 9.35042138, 2.08182773]])
# scale variables derived from Forward
c_scale = array([1.        , 0.16252347, 0.82658096, 0.05811253])
# Transition matrix
A = array([[0.9, 0.1, 0. ],
           [0. , 0.9, 0.1]])
# Emission matrix, calculated as getting the pdf for each x given a gaussian dist
B = array([[1.        , 0.06947052, 1.        ],
           [0.14182701, 1.        , 0.81107303]])
# Observation sequence
x = [-0.2, 2.6, 1.3]
# The normalised gamma
gamma = array([[1.        , 0.06495786, 0.        ],
               [0.        , 0.93504214, 1.        ]])

标签: pythonnumpyhidden-markov-models

解决方案


推荐阅读