繁体   English   中英

如何使用hidden_​​markov修复广播状态和发射概率的错误?

[英]How can I fix error of broadcasting state and emission probability using hidden_markov?

在其文档的一个简单示例中进行细微更改时,hidden_​​markov软件包出现问题。 在下面的代码中,我尝试2种状态和3种可能的观察结果(在文档示例中,有2种可能的观察结果,并且代码运行正常):

states = ('s', 't')
possible_observation = ('A', 'B', 'C')

# Numpy arrays of the data

start_probability = np.matrix( '0.5 0.5')
transition_probability = np.matrix('0.6 0.4 ; 0.3 0.7')
emission_probability = np.matrix( '0.3 0.2 0.5 ; 0.3 0.1 0.6')

# Initialize class object

test = hmm(states,possible_observation,
           start_probability,
           transition_probability,
           emission_probability)

observations = ('A', 'B','B','A', 'C')
obs4 = ('B', 'C', 'A','B')
observation_tuple = []
observation_tuple.extend( [observations,obs4] )
quantities_observations = [18, 28]
num_iter=1000

e,t,s = test.train_hmm(observation_tuple,num_iter,quantities_observations)

运行代码后,出现错误:

ValueError: operands could not be broadcast together with shapes (2,3) (1,2)

有趣的是,当我尝试3种状态和3种可能的观察结果(并根据此更改修改概率矩阵)时,代码可以正常工作。 我丢失了某些东西,或者状态数和可能的观察值应该始终相等,这没有任何意义。

根据您在上面提供的矩阵,只有两个形状分别为(2,3)(1,2)的矩阵分别为emission_probability概率和start_probability概率,误差为矩阵维数不匹配。 为了匹配矩阵尺寸,以便可以将它们用于点积的计算。

emission_probability = emission_probability.T
start_probability = start_probability.T

必须在初始化类对象之前完成此步骤。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM