Автоматический выбор модели, обучение и тестирование скрытой марковской модели.

Во время моей докторской диссертации. в Калифорнийском университете в Лос-Анджелесе я разработал различные модели для последовательных данных и данных временных рядов. Скрытая модель Маркова (HMM) была одной из первых моделей, которые я использовал, и она работала достаточно хорошо. Я не смог найти никакого учебника или каких-либо рабочих кодов по HMM в Python/MATLAB/R. Я выпускаю Auto-HMM, который представляет собой пакет Python для автоматического выбора модели с использованием AIC/BIC для контролируемого и неконтролируемого HMM.

Этот пакет использует hmmlearn для обучения и декодирования скрытых марковских моделей и включает выбор модели по оптимальному количеству параметров (количество компонентов смеси, количество скрытых состояний и т. д.). Я реализовал аналогичный пакет в MATLAB и R.

Пожалуйста, оставьте комментарий под этим постом, если вы хотите увидеть реализацию одной и той же модели в R и MATLAB.

Обучение HMM осуществляется с помощью алгоритма Баума-Уэлча, который является частным случаем алгоритма EM. Декодирование осуществляется с помощью алгоритма Витерби. Я предполагаю, что пакет hmmlearn поддерживает декодер MAP помимо декодера ML (Viterbi).

Выбор модели осуществляется с помощью AIC и BIC, которые действуют путем штрафования функций правдоподобия. Здесь это делается автоматически, задавая максимальное количество скрытых состояний, которое вам нравится, и алгоритм находит оптимальное количество скрытых состояний для дискретного НММ, оптимальное число компонентов смеси и оптимальное количество скрытых состояний для непрерывного НММ.

Чтобы получить доступ к коду, посетите мой GitHub по адресу



Пожалуйста, просмотрите примеры в файлах Python DHMM_Testing и HMM_Testing. Они требуют, чтобы вы предоставили адрес файла CSV, количество итераций для модели HMM, размер обучения, количество функций (размерность временного ряда).

В качестве примера следующий код выполняет дискретный HMM для 2000 наблюдений с 50 моментами времени для максимум 3 скрытых состояний. Размер обучения установлен равным 0,8 (0,8 * 2000 = 1600). Подвиг определяет размерность временного ряда (1 означает одномерный временной ряд). Флаг определяет, хотите ли вы сортировать скрытые состояния в порядке убывания или возрастания.

from Hidden_Markov_Model import *
from Hidden_Markov_Model.DHMM import *
Train_ratio=0.8
Max_state=3
Iter=1000
Feat=1
N=2000
T=50
flag=0
N_symb=3
Path= 'Path to CSV file'
Data=pd.read_csv(Path)
Data=Data.astype(int)
First_DHMM=Supervised_DHMM(Train_ratio,Max_state,Iter,Feat,N,T,Data,N_symb)
First_DHMM.Best_States()

Для получения дополнительной информации о моих недавних действиях и любых вопросов, пожалуйста, посетите мою страницу YouTube. Я также написал tsBNgen, пакет Python для создания синтетических данных временных рядов, которые можно использовать в качестве входных данных для модели Auto-HMM. Чтобы узнать больше о tsBNgen, посетите мою страницу на YouTube ниже.



Если у вас есть какие-либо вопросы или проблемы, вы можете посетить мою личную страницу по адресу



Чтобы узнать больше о моделировании и реализации HMM, обратитесь к следующему видео: