Скрытые марковские модели в пакете R

Мне нужна помощь в реализации модуля HMM в R. Я новичок в R и не очень разбираюсь в этом. Поэтому я должен реализовать IE, используя HMM, у меня есть 2 папки с файлами, одна с предложениями, а другая с соответствующими тегами, которые я хочу выучить из каждого предложения.

folder1 > event1.txt: "2013 2nd International Conference on Information and Knowledge Management (ICIKM 2013) will be held in Chengdu, China during July 20-21, 2013."

folder2 > event1.txt: 
"N: 2nd International Conference on Information and Knowledge Management (ICIKM 2013)
D: July 20-21, 2013
L: Chengdu, China"

N -> Name; D -> Date; L -> Location

Мой вопрос заключается в том, как реализовать это на R, как я инициализирую модель и как мне ее обучить? И как мне применить его к случайному предложению для извлечения информации?

Заранее спасибо за помощь!

4 ответа

Если вы запустите следующую команду:

RSiteSearch('hidden markov model')

Затем он находит 4 вида задач, 40 виньеток и 255 функций (когда я запустил его, к тому времени, когда вы его запустите, их может быть больше).

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

Я не уверен, что именно вы хотите сделать, но вам может пригодиться этот замечательный учебник по скрытым марковским моделям с использованием R. Вы строите функции и марковские модели с нуля, начиная с обычных марковских моделей, а затем переходя к скрытым марковским моделям. Это действительно ценно понимать, как они работают.

Существует также пакет R depmixS4 для определения и подгонки скрытых моделей Маркова. Его документация довольно солидна, и прохождение примера кода может вам помочь.

depmixS4 является наиболее общим и достаточно хорошим пакетом, если вы заставите его работать с вашими данными. Он проверил фиктивные данные для меня, но дал ошибку на реальных данных. HMM также работает, но только если у вас есть дискретные переменные, а не непрерывные.

DepmixS4 - это то, что вы ищете.

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

Я создал функцию HMM_model_execution, которая будет возвращать переменную модели и количество состояний для модели.

  library(depmixS4)
  • первый столбец должен быть видимым состоянием и оставшейся внешней переменной в doc_data

    HMM_model_execution<-function( doc_data, k) 
    
  • k количество всего скрытого состояния для сравнения

    {
         aic_values <- vector(mode="numeric", length=k-1) # to store AIC values
    
         for( i in 2:k)
         {
               print(paste("loop counter",i))
               mod <- depmix(response = doc_data$numpresc ~ 1, data = doc_data, nstates = i)
               fm <- fit(mod, verbose = FALSE)
               aic_values[i-1]<- AIC(fm)
               #print(paste("Aic value at this index",aic_values[i-1]))
               #writeLines("\n")
         }
    
         min_index<-which.min(aic_values)     
    
  • нет скрытых состояний для лучшей модели

    #print(paste("index of minimum AIC",min_index))
    mod <- depmix(response = doc_data$numpresc ~ 1, data = doc_data, nstates = (min_index+1))
    fm <- fit(mod, verbose = FALSE)                                         
    
  • лучшее исполнение модели

    print(paste("best model with number of hidden states", min_index+1))
    return(c(fm, min_index+1))
    writeLines("\n")
    writeLines("\n")
    

Внешние переменные (ко-переменные могут быть переданы в функцию depmix). резюме (ФМ) даст вам все параметры модели.

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