Мой подход к вашей проблеме будет состоять в использовании многовариантного гауссиана для вероятностей выбросов.
Например: предположим, что K равно 2, то есть количество местоположений равно 2.
В hmmlearn K будет закодирован в размерах средней матрицы.
См. Этот пример Выборка из HMM имеет двухмерный выход. Другими словами, X.shape = (N, K) где N - длина выборки 500 в этом случае, а K - размерность вывода, равная 2.
Обратите внимание, что авторы нанесли каждый размер на ось, т. Е. Ось x построила первый размер X [:, 0], а ось y - второй размер X [:, 1].
Чтобы обучить вашу модель, убедитесь, что X1 и X2 имеют ту же форму, что и выбранный X в примере, и сформируйте обучающий набор данных, как описано здесь .
В итоге, адаптируйте пример к вашему случаю, отрегулировав K вместо K = 2 и преобразовав его в GMHMM вместо GaussianHMM.
# Another example
model = hmm.GaussianHMM(n_components=5, covariance_type="diag", n_iter=100)
K = 3 # Number of sites
model.n_features = K # initialise that the model has size of observations = K
# Create a random training sequence (only 1 sequence) with length = 100.
X1 = np.random.randn(100, K) # 100 observation for K sites
model.fit(X1)
# Sample the fitted model
X, Z = model.sample(200)