我已经在python中实现了baum-welch算法,但是我在尝试训练HMM(隐藏马尔可夫模型)参数A
,B
和pi
时遇到了问题。问题是我有很多观察序列Y = (Y_1=y_1, Y_2=y_2,...,Y_t=y_t)
。在我的案例中,每个观察变量Y_t
都可以采用K
个可能的值,K=4096
。幸运的是,我只有两个状态N=2
,但我的发射矩阵B
是N by K
所以2行乘4096列。
现在,当您初始化B时,每行必须总和为1.由于两行中的每一行都有4096个值,因此数字非常小。这么小,当我去计算alpha
和beta
时,他们的行最终接近0,t
增加。这是一个问题,因为您在尝试计算gamma
或x/0
时无法计算0/0
。如何在不崩溃且不永久改变我的值的情况下运行算法?
答案 0 :(得分:0)
这听起来像标准的HMM缩放问题。看看"隐藏马尔可夫模型教程......" (Rabiner,1989),V.A" Scaling"。
简而言之,您可以每次重新调整alpha
总和为1,并使用相同的因子重新调整beta
,并将其作为相应的alpha
,以及所有内容应该工作。