Переменные временные шаги в наблюдениях, подаваемых в скрытую марковскую модель

Я предполагаю, что это невозможно, по крайней мере, со стандартной реализацией HMM scikit-learn, но я хотел задать этот вопрос, чтобы посмотреть, есть ли другие подходы к этой проблеме.

Проблема в основном в том, что я хочу использовать скрытую марковскую модель, чтобы соответствовать некоторому набору последовательностей наблюдений; однако мои наблюдения не всегда совпадают с одним и тем же шагом по времени. Так, например, у меня может быть две последовательности, которые я хочу использовать для подгонки, например:

obs1 = [1,2,3,4]
obs2 = [1,2,2,4]

Тем не менее, они не обязательно равномерно распределены во времени. Так что, может быть, что говорят наблюдения в obs1 наблюдались время от времени 1,2,3,6и наблюдения в obs2 наблюдались время от времени 1,4,5,6, Поэтому кажется неправильным вводить их в HMM как есть.

До сих пор я пытался "интерполировать" наблюдения так, чтобы временные шаги были одинаковыми. Таким образом, приведенные выше примеры станут:

obs1 = [1,2,3,3,3,4]
obs2 = [1,1,1,2,2,4]

Это, кажется, работает относительно хорошо для моей проблемы машинного обучения; однако, это значительно замедляет подгонку из-за большого количества дополнительных выборок (наблюдения относительно редки, поэтому добавление этих интерполяций добавляет сотни дополнительных наблюдений). Есть ли другой способ сделать это?

1 ответ

Я думаю, что вы нашли самое простое решение здесь - если оно сработает, я продолжу. Несколько других (возможных) решений приходят на ум.

  1. Вместо прямого кодирования, попробуйте кодировать разность, т.е. 1, 1, 1, 1, 1, 2, 1 может быть 1, 0, 0, 0, 0, 1, -1. Это может позволить вам "уменьшить" высокоскоростной сигнал, чтобы смотреть только на состояния, когда все действительно меняется. В коммуникациях это было бы что-то вроде перехода от BPSK (двоичная фазовая манипуляция) к DBPSK (дифференциальная двоичная фазовая манипуляция) - вы можете посмотреть на них для некоторых идей.

  2. Эти события на самом деле связаны в смысле вероятности? Может быть, вы можете разложить их на отдельные HMM, а затем использовать каждую вероятность для подачи другого классификатора / статистического решения. Это, вероятно, самый простой способ обработки "нескольких скоростей потока" без значительных потерь из-за повышающей дискретизации более низкого сигнала, особенно если сигнал более низкой скорости значительно меньше, чем более высокая скорость.

  3. Найдите представление функции для кодирования сигнала низкой скорости на сигнал высокой скорости. Это позволит вам объединиться в один поток, но может не сэкономить время вычислений.

  4. Вы можете попытаться случайным образом отобрать сигнал с более высокой скоростью. Вы потеряете информацию, но общая изученная модель все еще может быть полезной. Идея аналогична сжатому восприятию, хотя было бы лучше "провести" точки отбора проб вокруг областей с большим разбросом.

Как упомянул @eickenberg, в ближайшем будущем HMM перейдут к собственному репо, получившему название HMMlearn (я думаю, 0,16), так что будьте внимательны!

Другие вопросы по тегам