维特比算法求最优路径——机器学习作业

该代码示例展示了如何使用numpy库处理HiddenMarkovModel(HMM)中的状态转移和观测概率,通过动态规划方法找到给定观测序列的最优状态路径。算法首先初始化概率向量,然后逐次计算每个时间步的delta和psi向量,最后得出最优路径。
摘要由CSDN通过智能技术生成

题目:

解决代码如下:

# A是状态转移概率矩阵,B是观测概率矩阵,pi是初始状态概率向量

import numpy as np

A = np.array([[0.5, 0.2, 0.3], [0.3, 0.5, 0.2], [0.2, 0.3, 0.5]])
B = np.array([[0.5, 0.5], [0.4, 0.6], [0.7, 0.3]])
pi = np.array([0.2, 0.4, 0.4])
T, N = 4, 3
# 最终序列
o = ['红', '白', '红', '白']
o_map = {'红': 0, '白': 1}

# 初始化
delta1 = pi * B[:, o_map[o[1-1]]]
psi1 = np.zeros(N)

# 递推 向量化的写法简单,实际上还是按单项掰手指头搞出来的
delta2 = ((A.T * delta1).T * B[:, o_map[o[2-1]]]).max(0)
psi2 = (A.T * delta1).T.argmax(0)

delta3 = ((A.T * delta2).T * B[:, o_map[o[3-1]]]).max(0)
psi3 = (A.T * delta2).T.argmax(0)

delta4 = ((A.T * delta3).T * B[:, o_map[o[4-1]]]).max(0)
psi4 = (A.T * delta3).T.argmax(0)

# 最优路径
p_star = delta4.max()
i4 = delta4.argmax()

i3 = psi4[i4]
i2 = psi3[i3]
i1 = psi2[i2]

# 修正索引的0打头问题,输出
I_star = [i1+1, i2+1, i3+1, i4+1]
print('最优路径:', I_star)

 算法思路:

主要运用了动态规划的思想

算法流程图:

 

 根据算法流程图的每一个步骤即可写出实现代码

运行结果如下:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值