Как я могу исправить ошибку состояния вещания и вероятность излучения с помощью hidden_markov? - PullRequest
0 голосов
/ 18 февраля 2019

У меня проблема с пакетом 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 возможных наблюдения (и изменяю матрицы вероятностей на основе этого изменения), код работает нормально.Либо я что-то упускаю, либо число состояний и возможных наблюдений всегда должно быть одинаковым, что не имеет смысла.

1 Ответ

0 голосов
/ 18 февраля 2019

На основе предоставленной вами матрицы, есть только две матрицы, имеющие форму (2,3) и (1,2), которые равны emission_probability и start_probability соответственно, и ошибка заключается в несоответствии размеров матрицы.Чтобы сопоставить размеры матрицы, чтобы их можно было использовать для вычисления точечного произведения, выполните следующие действия.

emission_probability = emission_probability.T
start_probability = start_probability.T

Этот шаг необходимо выполнить до инициализации объекта класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...