我想通过使用泊松观测值来训练一个新的隐马尔可夫模型,这是我唯一知道的信息。我正在使用R语言的mhsmm包。
首先让我困扰的是模型的初始化,在示例中是这样的:
J<-3initial <- rep(1/J,J)P <- matrix(1/J, nrow = J, ncol = J)b <- list(lambda=c(1,3,6))model = hmmspec(init=initial, trans=P, parms.emission=b,dens.emission=dpois.hsmm)
在我的情况下,我没有发射分布参数的初始值,这是我想估计的。该怎么做呢?
其次:如果我只有观测值,我如何将它们传递给
h1 = hmmfit(list_of_observations, model ,mstep=mstep.pois)
以便获得训练后的模型?在示例中,list_of_observations
包含一个状态向量、一个观测值向量和一个观测序列长度向量,通常通过模型的模拟获得:
list_of_observations = simulate(model, N, rand.emis = rpois.hsmm)
编辑:我找到了一个旧问题,答案部分解决了我的问题:MHSMM包在R中的输入格式?这两行代码解决了问题:
train <- list(x = data.df$sequences, N = N)class(train) <- "hsmm.data"
其中data.df$sequences是包含所有观测序列的数组,N是包含每个序列的观测数量的数组。尽管如此,初始模型完全是随机的,但我猜这就是它的本意,因为它将被重新估计,对吗?
回答:
初始化问题不仅对隐马尔可夫模型和隐半马尔可夫模型很关键,对所有基于期望最大化算法形式的学习方法都很关键。EM算法在模型与数据的似然性方面收敛到局部最优,但这并不总是保证达到全局最优。