У меня есть временной ряд положения частицы во времени, и я хочу оценить параметры модели двух HMM, используя эти данные (один для оси x, другой для оси y). Я использую библиотеку hmmlearn, однако мне непонятно, как мне обращаться. В учебнике указано, что это третий способ использования библиотеки, однако, когда я использую код ниже:
remodel = hmm.GaussianHMM(n_components=3, covariance_type="full", n_iter=100)
remodel.fit(X)
Z2 = remodel.predict(X)
и X - это список значений оси x, он возвращает
ValueError: Expected 2D array, got 1D array instead
Что следует добавить к моим данным, чтобы превратить его в 2D?
Caveat emptor: Мое понимание HMM и этой библиотеки основано на нескольких минутах от Google и Википедии. Это сказало:
Для обучения модели HMM вам нужно несколько выборок, каждый из которых является вектором функций. Например, в примере Википедии Алисы, прогнозирующем погоду в доме Боба, основываясь на том, что он делал каждый день, Алиса получает несколько образцов (что Боб говорит ей каждый день), каждый из которых имеет одну функцию (Боб сообщил о деятельности в тот день). Было бы вполне возможно, чтобы Боб дал Алисе несколько функций за данный день (что он сделал и каково было его наряд, например).
Чтобы узнать/установить модель HMM, вам понадобится серия образцов, каждый из которых является вектором функций. Вот почему функция fit
ожидает двумерный вход. Из документов, как ожидается, X
будет "подобен массиву, форма (n_samples, n_features)
". В вашем случае позиция частицы является единственной особенностью, причем каждое наблюдение является образцом. Таким образом, ваш ввод должен быть массивом типа n_samples, 1
(один столбец). Прямо сейчас он предположительно имеет форму 1, n_samples
(одна строка, по умолчанию - что-то вроде np.array([1, 2, 3])
). Так что просто измените форму:
remodel.fit(X.reshape(-1, 1))