【问题标题】:How can I fix error of broadcasting state and emission probability using hidden_markov?如何使用 hidden_​​markov 修复广播状态和发射概率的错误?
【发布时间】:2019-07-11 17:02:41
【问题描述】:

在其文档中的一个简单示例中应用轻微更改时,我遇到了 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 个可能的观察结果(并根据此更改修改概率矩阵)时,代码运行良好。要么我遗漏了一些东西,要么状态的数量和可能的观察结果应该总是相等的,这是没有意义的。

【问题讨论】:

    标签: python hidden-markov-models


    【解决方案1】:

    根据您上面提供的矩阵,只有两个矩阵的形状为(2,3) 和(1,2),分别是emission_probability 和start_probability,错误是矩阵维度不匹配。匹配矩阵维度以便它们可以用于计算点积是通过做的。

    emission_probability = emission_probability.T
    start_probability = start_probability.T
    

    这一步必须在初始化类对象之前完成。

    【讨论】:

    • 我添加了这个,但我得到了 ValueError:排放概率的维度不正确。我还应该补充一下,我在标题中错误地说我正在使用 hmmlearn。我实际上正在使用 hidden_​​markov (pypi.org/project/hidden_markov) 包。这有什么区别吗?
    • 你有什么想法吗?
    • @Sina 我没有使用 Hidden Markov,也没有使用您链接的库。我会调查一下然后回来,但这需要一些时间。
    猜你喜欢
    • 1970-01-01
    • 2019-09-13
    • 1970-01-01
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-13
    • 1970-01-01
    相关资源
    最近更新 更多