Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多观测Hmm训练与R中的mhsmm软件包_R_Machine Learning_Hidden Markov Models - Fatal编程技术网

多观测Hmm训练与R中的mhsmm软件包

多观测Hmm训练与R中的mhsmm软件包,r,machine-learning,hidden-markov-models,R,Machine Learning,Hidden Markov Models,我想通过泊松观测来训练一个新的hmm模型,这是我唯一知道的。 我用的是mhsmm软件包 让我头疼的第一件事是模型的初始化,在示例中是: J<-3 initial <- 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.hsm

我想通过泊松观测来训练一个新的hmm模型,这是我唯一知道的。 我用的是mhsmm软件包

让我头疼的第一件事是模型的初始化,在示例中是:

J<-3
initial <- 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)
为了得到经过训练的模型?
示例中的观测列表
包含一个状态向量、一个观测值和一个观测序列长度,通常通过模型模拟获得:

list_of_observations = simulate(model, N, rand.emis = rpois.hsmm)
编辑:找到此旧问题,其答案部分解决了我的问题: 这两句话起了作用:

train <- list(x = data.df$sequences, N = N)
class(train) <- "hsmm.data"

train初始化问题不仅对HMMs和HSMMs至关重要,而且对所有基于期望最大化算法的学习方法也至关重要。EM在模型和数据之间的可能性方面收敛到局部最优,但这并不总是保证达到全局最优。

  • 目标:找到排放分布的估计值,但也适用于初始概率和转移矩阵
  • 算法:需要进行初始估计才能开始优化
  • :必须提供参数的初始“猜测”
这在一开始看起来可能令人困惑,但是EM算法需要一个点来开始优化。然后,它进行一些计算,让你更好地估计自己的初始猜测(如你所说,重新估计)。它不可能不经过初始化就自己找到最佳参数

根据我的经验,没有通用的方法来初始化保证收敛到全局最优的参数,但这将更多地取决于手头的情况。这就是为什么初始化起着关键作用(主要是针对排放分布)

在这种情况下,我通常将训练数据分为不同的组(例如集合中某个参数的百分位数),估计这些组的参数,然后将它们用作EM算法的初始参数估计。基本上,你必须尝试不同的方法,看看哪一种效果最好


如果HMM解决了类似的问题,我建议搜索文献,并尝试它们的初始化方法。

谢谢您的回答。我改变了通过计算平均值来初始化排放参数的方式,并且值的平均值比之前的平均值大和小:
m1=平均值(值_-df[,3])
m2=平均值(值_-df[,3][value _-df[,3]>m1])
m0=平均值_-df[,3][value _-df 3]我建议您阅读Rabiner等人的主要HMM论文。有关参数初始化的更多信息…特别是连续观测符号。我认为这里描述了某种类型的K.means数据分割。获得良好初始化的简单方法是将yout数据分割为J块(其中J是模型的状态数)并计算每个块的参数值(正态分布情况下的均值和方差)
train <- list(x = data.df$sequences, N = N)
class(train) <- "hsmm.data"