隐马尔科夫模型Hidden Markov Model (HMM)

文章目录

概率计算算法

import numpy as np

# 状态集合 Q={0,1,2}
# 观测集合 V={0,1} red=0 white=1

# 状态转移
A = np.array([
    [.5, .2, .3],
    [.3, .5, .2],
    [.2, .3, .5],
])
# 发射概率 (状态 -> 观测)
B = np.array([
    [.5, .5],
    [.4, .6],
    [.7, .3]
])
# 初始状态概率
pai = np.array([  # 可以认为是0时刻
    .2, .4, .4
])
# 初始观测
O = ([0, 1, 0])
T = len(O)
# pai 是初始状态的概率,alpha记录每个时刻(从0到T)的状态概率
alpha = np.zeros([T, len(A)])  # alpha[t,a] t时刻处于a状态并且被观测到的概率
# 初始化1时刻
ob = O[0]
alpha[0, :] = B[:, ob] * pai  # 初始状态被观测到的概率
# 1时刻到T-1时刻
for t in range(1, T):
    ob = O[t]
    # 首先,从所有状态转移到a状态的概率
    tmp = np.zeros([len(A)])
    for a in range(len(A)):
        tmp[a] = (alpha[t - 1, :] * A[:, a]).sum()
    # 然后,这个概率被观测到的概率
    alpha[t, :] = tmp * B[:, ob]
ans = alpha[T - 1, :].sum()
print(ans)

发布了281 篇原创文章 · 获赞 35 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/TQCAI666/article/details/103134545