目录
一、前向算法
定义
过程
过程解析
二、例题
问题
答案
三、代码
import numpy as np
# Q:状态集合 V:观测集合
Q = [1, 2, 3] # 共3个箱子
V = [0, 1] # 0:红 1:白
# A:状态转移概率矩阵 B:观测概率矩阵
A = [[0.5, 0.2, 0.3], [0.3, 0.5, 0.2], [0.2, 0.3, 0.5]]
B = [[0.5, 0.5], [0.4, 0.6], [0.7, 0.3]]
Pi = [0.2, 0.4, 0.4]
O = [0, 1, 0] # (红白红)
# N是可能的观测数 M是可能的状态数
N = len(Q)
M = len(V)
T = len(O)
alphas = np.zeros((N, T))
def forward():
for t in range(T):
idx = V.index(O[t])
for i in range(N):
if t == 0:
alphas[i][t] = Pi[i] * B[i][idx]
print(alphas[i][t])
else:
alphas[i][t] = np.dot([alpha[t - 1] for alpha in alphas], [a[i] for a in A]) * B[i][idx]
P = np.sum(alpha[T - 1] for alpha in alphas)
return P
if __name__ == '__main__':
P = forward()
add:
资料:李航《统计学习方法》