Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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
Matlab 使用hmm对序列进行分类的基本帮助_Matlab_Machine Learning_Classification_Hidden Markov Models - Fatal编程技术网

Matlab 使用hmm对序列进行分类的基本帮助

Matlab 使用hmm对序列进行分类的基本帮助,matlab,machine-learning,classification,hidden-markov-models,Matlab,Machine Learning,Classification,Hidden Markov Models,我对matlab、隐马尔可夫模型和机器学习非常陌生,我正在尝试对给定的信号序列进行分类。请告知我所采用的方法是否正确: 创建一个N×N转换矩阵,并用随机值填充,每行的总和为1。(N为州数) 创建一个N×M发射/观测矩阵,并填充随机值,每行的总和为1 将序列的不同实例(即每个实例将说“hello”)转换为一个长流,并将每个流馈送给hmm训练函数,以便: 新转换矩阵旧转换矩阵=hmmtrain(序列、旧转换矩阵、旧排放矩阵) 给出hmm解码的最终转移矩阵和发射矩阵,给出未知序列的概率 i、 e[后验

我对matlab、隐马尔可夫模型和机器学习非常陌生,我正在尝试对给定的信号序列进行分类。请告知我所采用的方法是否正确:

  • 创建一个N×N转换矩阵,并用随机值填充,每行的总和为1。(N为州数)
  • 创建一个N×M发射/观测矩阵,并填充随机值,每行的总和为1
  • 将序列的不同实例(即每个实例将说“hello”)转换为一个长流,并将每个流馈送给hmm训练函数,以便:

    新转换矩阵旧转换矩阵=hmmtrain(序列、旧转换矩阵、旧排放矩阵)

  • 给出hmm解码的最终转移矩阵和发射矩阵,给出未知序列的概率 i、 e
    [后验状态对数概率]=hmmdecode(序列、最终转换矩阵、最终排放矩阵)


  • 1.2.是正确的。您必须小心,您的初始过渡和发射矩阵不是完全一致的,它们应该稍微随机化,以便工作

    3.我只想单独输入“Hello”序列,而不是将它们串联成一个长序列

    假设这是Hello的序列:
    [1,0,1,1,0,0]
    。如果您从3个“Hello”序列中形成一个长序列,您将得到:

    data=[1,0,1,1,0,0,1,0,1,1,0,0,1,0,1,1,0,0]

    这并不理想,相反,您应该单独输入序列,如:

    数据=[1,0,1,1,0,0;1,0,1,1,0,0;1,0,1,1,0,0]

    因为您使用的是MatLab,所以我建议您使用Murphy提供的。它有一个演示如何使用多个观察序列训练HMM:

    M = 3;
    N  = 2;
    
    % "true" parameters
    prior0 = normalise(rand(N ,1));
    transmat0 = mk_stochastic(rand(N ,N ));
    obsmat0 = mk_stochastic(rand(N ,M));
    
    % training data: a 5*6 matrix, e.g. 5 different 'Hello' sequences of length 6
    number_of_seq = 5;
    seq_len= 6;
    data = dhmm_sample(prior0, transmat0, obsmat0, number_of_seq, seq_len);
    
    % initial guess of parameters
    prior1 = normalise(rand(N ,1));
    transmat1 = mk_stochastic(rand(N ,N ));
    obsmat1 = mk_stochastic(rand(N ,M));
    
    % improve guess of parameters using EM
    [LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', 5);
    LL
    
    4.您所说的是正确的,下面是如何在HMM工具箱中计算日志概率:

    % use model to compute log[P(Obs|model)]
    loglik = dhmm_logprob(data, prior2, transmat2, obsmat2)
    
    最后:如果有什么不清楚的地方,看看数学是如何工作的


    希望这能有所帮助。

    您能告诉我prior0的确切含义吗?谢谢你的回答。真的很感激。你的情况下实际上不需要它<代码>优先级0,
    传输0
    obsmat0
    用于数据生成步骤。它们代表真实的模型(由机器学习者生成),以便在训练系统后,实验者可以将学习的参数
    prior2
    transmat2
    obsmat2
    与实际创建数据的参数进行比较
    prior0
    具体给出了系统在一开始就处于某个状态的概率,例如“模型是从状态1还是状态2开始的?”非常感谢。但我现在正在看“混合高斯输出的HMM”,因为我需要向量,但我很难理解这行“现在让我们使用拟合m=2高斯的混合”。M到底代表什么?我现在正在研究高斯分布,但我不知道M是做什么的。在一个典型的MoG应用程序中,样本数据被认为来自各种可能的来源(在您的例子中是M),来自每个特定来源的数据由高斯分布建模。谷歌和维基百科在这方面应该有很大帮助。例如,@Zhubarb我在
    hmmtrain
    或HMM的训练过程中有点困惑,但是我想知道当特别使用EM训练时,是否有一些
    .xml
    为过去的记录生成或在运行时生成概率,我还需要关于HMM的帮助。你使用了哪个工具箱?就像下面的答案一样,我使用了Murphys工具箱,但使用了带有高斯输出的HMM。你可以看到这里的教程,我看到了,我提出了一些关于HMM的问题,HMM是否会生成一个经过训练的文件,比如神经网络中的
    .xml
    ?我想用HMM来训练轨迹,有X,Y,Z坐标,什么是序列,因为我认为我的状态是每一个新的状态位置变化行。