精华内容
下载资源
问答
  • 该资源直接运行runtest.m可测试HMM的评估和解码问题,运行baum_welch_test_mine.m测试HMM学习问题
  • matlab隐马尔可夫模型事例代码,相信对学习马尔科夫模型的同学非常有用
  • 贝叶斯隐马尔可夫模型工具箱 用于单分子轨迹数据分析的贝叶斯隐马尔可夫模型 该项目提供了用于估计亚稳态状态数,状态之间的速率常数,平衡总体,表征状态的分布以及这些量从单分子数据中的分布的工具。 此数据可以...
  • 隐马尔可夫模型源代码(matlab)
  • 隐马尔可夫模型前向算法matlab程序-forward algorithm.m 这个是隐马尔可夫模型前向算法程序,根据一个示例用matlab编写的,希望对大家有用。由于在线时间不够,所以图贴不上来,我只能以附件的形式发上来了。。。
  • 这是我个人实现的隐马尔可夫模型和高斯混合模型,这是统计机器学习中的两个经典生成模型。 HMM是在无监督的情况下进行训练的,代码实现了前向后退算法,以在给出部分/全部观测值的任何时间步长计算状态的边际概率,...
  • 隐马尔可夫模型(HMM)的孤立字语音识别,matlab程序实现
  • 贝叶斯鲁棒隐马尔可夫模型 (BRHMM) 是一种用于分割序列多变量数据的概率模型。 该模型将数据解释为由一系列隐藏状态生成。 每个状态都是重尾分布的有限混合,具有特定于状态的混合比例和共享位置/分散参数。 该模型...
  • hmm模型matlab代码TurboCoding和隐马尔可夫模型(HMM) 这是关于隐马尔可夫模型,正演算法和Turbo解码器的。 Turbo解码是一种信念传播算法。 Turbo解码器由两个MAP解码器组成。 一个解码器将另一个解码器的输出用作...
  • 应用于图像处理的隐马尔可夫模型源代码 MATLAB代码
  • MATLAB工具箱大全- 隐马尔可夫模型工具箱 HMM
  • MATLAB隐马尔可夫模型程序包应用例程多维高斯混合隐马尔可夫模型一维离散隐马尔可夫模型 多维高斯混合隐马尔可夫模型 %离散高斯隐马尔可夫 Ov_1 = 3; %观测向量维数 T_1 = 215; %观测序列的长度 nex_1 = 1; %抽取...

    MATLAB隐马尔可夫模型程序包应用例程


    HMM 工具包下载地址:

    http://www.cs.ubc.ca/~murphyk/Software/HMM/hmm.html
    工具包使用说明:
    http://www.cs.ubc.ca/~murphyk/Software/HMM/hmm_usage.html

    多维高斯混合隐马尔可夫模型

    %离散高斯隐马尔可夫
    Ov_1 = 3;     %观测向量维数
    T_1 = 215;    %观测序列的长度
    nex_1 = 1;    %抽取观测样本组数(这个我也没搞懂,猜的)
    %data = randn(O,T,nex);     %随机生成的数据,用来测试模型
    data_1 = importdata('1000.txt')      
    data_1 = data_1.';     %转置
    M = 2;        %高斯混合常数
    Q_1 = 5;      %隐变量数
    left_right = 0;     
    prior_1_0 = normalise(rand(Q_1,1));     %随机生成一个初始状态概率矩阵,
    transmat_1_0 = mk_stochastic(rand(Q_1,Q_1));     %随机生成一个初始状态转移矩阵
    
    cov_type = 'full';            
    [mu_1_0, Sigma_1_0] = mixgauss_init(Q_1*M, reshape(data_1, [Ov_1 T_1*nex_1]), cov_type);   %初始化
    
    
    mu_1_0 = reshape(mu_1_0, [Ov_1 Q_1 M]);      
    Sigma_1_0 = reshape(Sigma_1_0, [Ov_1 Ov_1 Q_1 M]);
    mixmat_1_0 = mk_stochastic(rand(Q_1,M));
    
    %迭代训练模型
    [LL, prior_1, transmat_1, mu_1, Sigma_1, mixmat_1] = mhmm_em(data_1, prior_1_0, transmat_1_0, mu_1_0, Sigma_1_0, mixmat_1_0, 'max_iter', 50);
    
    B = mixgauss_prob(data_1, mu_1, Sigma_1, mixmat_1);
    
    %导出第一层的隐藏状态序列
    [path_1] = viterbi_path(prior_1, transmat_1, B);
    
    
    xlswrite('D:\dhmm\middle.xlsx',path_1);
    

    离散隐马尔可夫模型的输入数据data_1
    该模型的输入数据即观测变量是连续值,又是三(多)维的,所以我们要用高斯混合隐马尔可夫模型。该模型的输入是连续值,输出的隐状态序列是离散的。
    这里的data_1 = importdata(‘1000.txt’) ,数据导入matlab后是215*3的
    矩阵,行是时间序列,列是三维观测变量。这里程序包要求列是时间序列,行是观测变量,所以我们对其进行转置。随机生成一个初始状态概率矩阵和初始状态转移矩阵后,定义协方差矩阵类型cov_type = ‘full’。完成初始化和矩阵调整之后,调用程序包中的多维变量训练函数mhmm_em(),对迭代模型进行训练。然后导出隐藏状态序列到名为middle.xlsx的excel文件中,方便后续使用。

    一维离散隐马尔可夫模型

    由于我们在上面的模型输出是一个离散的序列,所以我们可以将这个序列作为离散隐马尔可夫模型的输入

    %第二层
    O = 5;    %三个观测
    Q = 3;    %两个状态、
    
    prior0 = normalise(rand(Q,1));
    transmat0 = mk_stochastic(rand(Q,Q));
    obsmat0 = mk_stochastic(rand(Q,O)); 
    
    %从该模型中采样长度为T = 1的nex = 20个序列,用作训练数据
    T=1;            
    nex=20;    %序列长度
    %data = dhmm_sample(prior0, transmat0, obsmat0, nex, T);  
    
    
    prior1 = normalise(rand(Q,1));
    transmat1 = mk_stochastic(rand(Q,Q));
    obsmat1 = mk_stochastic(rand(Q,O));
    data = xlsread('D:\dhmm\middle.xlsx');
    
    %并使用EM的迭代来改善我们的猜测。loglik 即用来预测测试数据的相似程度 越大越相似 0为最大
    [LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', 60);
    
    
    %序列分类
    %给定测试数据的情况下评估经过训练的模型的对数似然
    loglik = dhmm_logprob(data, prior2, transmat2, obsmat2);
    
    %计算最可能的序列(Viterbi)
    B = multinomial_prob(data, obsmat2);
    %B = mixgauss_prob(data(:,:,ex), mu, Sigma, mixmat);
    [path_2] = viterbi_path(prior2, transmat2, B);
    

    同上面的模型一样,我们随机初始化后,调用程序包中的dhmm_em()迭代训练模型,然后调用multinomial_prob()和viterbi_path()函数得出隐藏序列。

    本模型比较粗糙,尚不完善,有建议或问题欢迎在评论区提出,我们共同讨论。

    参考:

    由于EM算法只能得到局部最优,对于初始选择很关键;对于高斯混合的初始初值设置:

    https://www.media.mit.edu/wearables/mithril/BNT/mixtureBNT.txt

    展开全文
  • 本文所有代码都经过验证,可放心使用 前向算法—后项算法 function [alpha,betta,p1,p2] = ForwardBackward(A,B,PI,O) %前向算法和后向算法 A_size=size(A); N=A_size(1,1);%状态集合(隐藏状态的个数)Q包含的元素...

    本文所有代码都经过验证,可放心使用
    前向算法—后项算法
    function [alpha,betta,p1,p2] = ForwardBackward(A,B,PI,O)
    %前向算法和后向算法
    A_size=size(A);
    N=A_size(1,1);%状态集合(隐藏状态的个数)Q包含的元素个数
    O_size=size(O);
    T=O_size(1,1);%观测序列和观测序列对应的状态序列的长度
    %%赋值
    alpha=zeros(T,N);
    %%---------前向算法初始化-------------
    %%alpha(1,i)=PI(i)*B(i,1)
    for i=1:N
    alpha(1,i)=PI(i)B(i,1);
    end
    %%--------前向算法递推--------------
    %%alpha_t+1_i=sum(from_j=1_to_N alpha_t_j
    A_j_i)*B(i,O(t+1,1))
    for t=1:T-1
    alpha(t+1,:)=alpha(t,:)*A.*B(:,O(t+1,1))’;
    end
    %%--------前向算法终止------------
    %%计算观测序列的概率
    p1=0;
    for i=1:N
    p1=p1+alpha(T,i);
    end
    betta=zeros(T,N);
    %%---------后向算法赋初值---------
    for i=1:N
    betta(T,i)=1;
    end
    %%--------后向算法递推-----------
    %%betta(t,i)=sum(from_j=1_to_j=N_A(i,j)*B(O(t+1,1),j)*betta(t+1,j))
    for t=T-1👎1
    betta(t,:)=betta(t+1,:).*B(:,O(t+1,1))’*A’;
    end
    %%为了方便起见,我把递推的计算过程用矩阵运算表示出来了
    %%-------后向算法终止-------------
    %%计算观测序列的概率
    p2=0;
    for i=1:N
    p2=p2+PI(i)*B(i,O(1,1))betta(1,1);
    end
    end
    gamma 和cauthy的计算过程
    function [Gama,Xi] = GamaXi(A,B,PI,O)
    %计算Gama和Xi
    %调用函数ForwardBackward,计算出所需要的参数 alpha,betta,p1,p2
    [alpha,betta,p1,p2]=ForwardBackward(A,B,PI,O);
    %%__计算Gama
    A_size=size(A);
    O_size=size(O);
    T=O_size(1,1);
    N=A_size(1,1);
    %%Gama初始化
    Gama=zeros(T,N);
    %%Gama=(alpha_ti
    betta_ti)/p1,其中p1为观测序列的概率
    for t=1:T
    for i=1:N
    Gama(t,i)=(alpha(t,i)*betta(t,i))/p1;
    end
    end
    %%计算Xi_____
    %%因为Cauthy有三个下标,为了方便起见,我们把Cauthy设为三维矩阵
    %%Xi(i,j,t)=alpha(t,i)*A(i,j)*B(j,O(t+1,1))*betta( b)
    Xi=zeros(N,N,T-1);
    for t=1:T-1
    for i=1:N
    for j=1:N
    Xi(i,j,t)=(alpha(t,i)*A(i,j)*B(j,O(t+1,1))*betta(t+1,j))/p2;
    end
    end
    end
    end
    鲍姆韦尔奇算法
    function [A_1,B_1,PI_1] = BaumWelch(A,B,PI,O)
    A_size=size(A);
    O_size=size(O);
    B_size=size(B);
    M=B_size(1,2);%观测集中元素的个数,即V中元素的个数
    N=A_size(1,1);%隐藏状态集元素的个数,即Q中元素的个数
    T=O_size(1,1);%观测序列的长度。
    %鲍姆韦尔奇算法对参数进行估计
    %%更新参数PI(i)____
    %%公式:PI(i)=Gama(1,i)
    [Gama,Xi]=GamaXi(A,B,PI,O);
    PI_1=zeros(T,1);
    for i=1:N
    PI_1(i)=Gama(1,i);
    end
    %%更新参数A(i,j)_____
    %计算Gamma的每一行之和,表示在观测时间序列的所有时刻都处于某一个状态的概率和
    f = sum(Gama,1);
    A_1=zeros(N);
    for i = 1:N
    for j = 1:N
    A_1(i,j) = sum(Xi(i,j,:))/ (f(1,i) - Gama(T,i));
    end
    end

    %%更新参数B(i,j)__
    B_1=zeros(N,M);
    c=0;
    G=[];
    for m = 1:M
    for j = 1:N
    for t = 1:T
    if O(t,1) == m % 用于比较输出的观测值是否由对应的状态值输出,即条件ot = vk;
    c = c + 1;
    G(c,1) = Gama(j,t);
    end
    end
    B_1(j,m) = sum(G) / f(1,j);
    c = 0;
    G = zeros();
    end
    end
    end
    维特比算法
    function [ I_star,sigma,cauthy] =Viterbi(A,B,PI,O)
    %维特比算法
    %参数初始化
    A_size=size(A);
    O_size=size(O);
    N=A_size(1,1);
    T=O_size(1,1);
    sigma=zeros(T,N);
    cauthy=zeros(T,N);
    %%初始化
    __
    for i=1:N
    sigma(1,i)=PI(i)*B(i,O(1,1));
    cauthy(1,i)=0;
    end
    %%递推________
    for t=2:T
    for i=1:N
    [max_num,max_index]=max(sigma(t-1,:).A(:,i)’);
    sigma(t,i)=max_num
    B(i,O(t,1));
    cauthy(t,i)=max_index;
    end
    end
    %%终止_______
    I_star=zeros(1,T);
    [P_star,I_star(1,T)]=max(sigma(T,:));
    %%最优路径回溯_____
    for t=T-1👎1
    I_star(1,t)=cauthy(t+1,I_star(1,t+1));
    end

    end

    展开全文
  • Octave代码,用于使用多重隐马尔可夫模型回归(MHMMR)进行多元时间序列的细分。 多重隐马尔可夫模型回归(HMMR),用于根据制度变化对多元时间序列进行细分。 该模型假设时间序列由一系列隐藏的离散状态/状态控制,...
  • 隐马尔可夫模型(HMM)是一个在你观察到的输出顺序,但不知道状态序列模型产生输出的过程。隐马尔可夫模型的分析试图从观察到的数据中恢复状态序列。 例如,考虑具有两个状态和六个可能输出的马尔可夫模型。该模型...

    原文链接:http://tecdat.cn/?p=7960

    原文出处:拓端数据部落公众号

    隐马尔可夫模型(HMM)简介

    隐马尔可夫模型(HMM)是一个在你观察到的输出顺序,但不知道状态序列模型产生输出的过程。隐马尔可夫模型的分析试图从观察到的数据中恢复状态序列。

    例如,考虑具有两个状态和六个可能输出的马尔可夫模型。该模型使用:

    • 红色骰子,有六个面,标记为1到6。

    • 一个绿色骰子,具有十二个侧面,其中五个侧面标记​​为2到6,其余七个侧面标记​​为1。

    • 加权的红色硬币,正面出现概率为.9,背面出现概率为1.。

    • 加权绿色硬币,其正面概率为0.95,背面概率为.05。

    该模型使用以下规则从集合{1、2、3、4、5、6}中创建数字序列:

    • 首先滚动红色骰子,然后写下出现的数字 。

    • 投掷红色硬币并执行以下操作之一:

      • 如果结果为正面,则滚动红色骰子并记下结果。

      • 如果结果是反面,则滚动绿色骰子并记下结果。

    • 在随后的每个步骤中,您翻转与上一步中滚动的骰子颜色相同的颜色的硬币。如果硬币正面朝上,则与上一步骤滚动相同的骰子。如果硬币出现反面,请切换到另一个骰子。

    该模型的状态图具有红色和绿色两种状态,如下图所示。

    您可以通过滚动具有与状态相同颜色的骰子来确定状态的发射。您可以通过翻转与状态相同颜色的硬币来确定到下一个状态的过渡。

    转换矩阵为:

    = [0.90.050.10.95]

    输出矩阵为:

    该模型不是隐藏的,因为您可以从硬币和骰子的颜色知道状态的顺序。但是,假设其他人 没有向您显示骰子或硬币。您所看到的只是输出的顺序。如果开始看到的数字比其他数字多1,则可能会怀疑骰子处于绿色状态,但由于无法看到要滚动的骰子的颜色,因此无法确定。

    隐藏的马尔可夫模型提出以下问题:

    • 给定一系列输出,最可能的状态路径是什么?

    • 给定一系列输出,您如何估算模型的转换和输出概率?

    • 什么是后验概率

    分析隐马尔可夫模型

    本节说明如何来分析隐马尔可夫模型。

    生成测试序列

    TRANS = [.9 .1; .05 .95];
    
    EMIS = [1/6, 1/6, 1/6, 1/6, 1/6, 1/6;...
    7/12, 1/12, 1/12, 1/12, 1/12, 1/12];

    要从模型生成状态和发射的随机序列 :

    输出seq是序列,输出states是状态序列。

    估计状态序列

    likelystates是与长度相同的序列seq

    要测试的准确性hmmviterbi 

    sum(states==likelystates)/1000
    ans =
       0.8200

    在这种情况下,最有可能的状态序列在82%的时间内与随机序列一致。

    估算转移和输出矩阵

     返回转换矩阵和输出矩阵的估计值:

    您可以将输出与原始 矩阵进行比较, TRANS并且EMIS

    TRANS
    TRANS =
    0.9000    0.1000
    0.0500    0.9500
    
    EMIS
    EMIS =
    0.1667    0.1667    0.1667    0.1667    0.1667    0.1667
    0.5833    0.0833    0.0833    0.0833    0.0833    0.0833

     

    假设您对TRANS和 有以下初步猜测EMIS

    TRANS_GUESS = [.85 .15; .1 .9];
    EMIS_GUESS = [.17 .16 .17 .16 .17 .17;.6 .08 .08 .08 .08 08];

    您估计TRANSEMIS如下:

    
    TRANS_EST2 =
    0.2286    0.7714
    0.0032    0.9968
    
    EMIS_EST2 =
    0.1436    0.2348    0.1837    0.1963    0.2350    0.0066
    0.4355    0.1089    0.1144    0.1082    0.1109    0.1220

     如果算法在最大迭代次数(默认值为)内未能达到此容差100,则算法将暂停。 

    如果算法未能达到所需的容差,请使用以下命令增加最大迭代次数的默认值:

    其中,maxiter是算法执行的最大步骤数。

    估计后验状态概率

    输出PSTATESM × L矩阵,其中M为状态数,L为的长度seqPSTATES(i,j)是条件概率,该模型处于状态i时,它产生j的 seq给出的是,seq 

    要返回序列概率的对数seq,请使用第二个输出参数hmmdecode

    随着序列长度的增加,序列的概率趋于0 。

    更改初始状态分布

    默认情况下, 隐藏的Markov模型函数从状态1开始。换句话说,初始状态的分布将其所有概率质量都集中在状态1处。要分配不同的概率分布,p = [ 1,2,...,M ],到M个初始状态,执行以下操作:

    如果转换矩阵和发射矩阵分别为TRANSEMIS,则可以使用以下命令来创建增强矩阵:

    TRANS_HAT = [0 p; zeros(size(TRANS,1),1) TRANS];
    
    EMIS_HAT = [zeros(1,size(EMIS,2)); EMIS];

    展开全文
  • 普查工具箱包括5个与隐马尔可夫模型相干的函数:hmmgenerate从一个马尔可夫模型发生一个事态序列和输出序列;hmmestimate计算迁移和输出的极大似然估计;hmmtrain从一个输出序列计算迁移和输出概率的极大似然估计;...

    普查工具箱包括5个与隐马尔可夫模型相干的函数:

    hmmgenerate从一个马尔可夫模型发生一个事态序列和输出序列;

    hmmestimate计算迁移和输出的极大似然估计;

    hmmtrain从一个输出序列计算迁移和输出概率的极大似然估计;

    hmmviterbi计算一个隐马尔可夫模型最可能的事态改变过程;

    hmmdecode计算一个给定输出序列的后验事态概率。

    下面局部推荐如何利用这些函数来分析隐马尔可夫模型。

    1. 发生一个测验序列

    下面代码发生上面简介中模型的迁移和输出矩阵:

    TRANS = [.9 .1; .05 .95;];

    EMIS = [1/6, 1/6, 1/6, 1/6, 1/6, 1/6;...

    7/12, 1/12, 1/12, 1/12, 1/12, 1/12];

    要从模型发生一个随机的事态序列和输出序列,利用hmmgenerate:

    [seq,states] = hmmgenerate(1000,TRANS,EMIS);

    输出中,seq是输出序列,states是事态序列。hmmgenerate在第0步从事态1开始,在第一步迁移到事态i1

    ,并归来i1作为事态的第一个入口。

    2. 估计事态序列

    给定了迁移和输出矩阵TRANS和EMIS,函数hmmviterbi利用Viterbi算法计算模型给定输出序列seq最有可能

    穿越的事态序列:

    likelystates = hmmviterbi(seq, TRANS, EMIS);

    likelystates是和seq一样长的序列。计算hmmvertibi的精度如下:

    sum(states == likelystates) / length(states)

    ans =

    0.8680

    3. 估计迁移和输出矩阵

    函数hmmestimate和hmmtrain用于估计给定输出序列seq的迁移和输出矩阵TRANS和EMIS。

    利用hmmestimate

    [TRANS_EST, EMIS_EST] = hmmestimate(seq, states)

    TRANS_EST =

    0.9065 0.0935

    0.0406 0.9594

    EMIS_EST =

    展开全文
  • 隐马尔可夫模型 工具箱matlab 代码
  • 马尔科夫模型matlab工具箱说明

    千次阅读 2016-12-05 12:07:24
    隐马尔可夫模型(HiddenMarkov Model,HMM)是统计模型,它用来描述一个含有隐含未知参数的马尔可夫过程;是序列数据处理和统计学习的重要模型。其难点是从可观察的参数中确定该过程的隐含参数,然后利用这些参数来...
  • 需要工具箱Matlab隐马尔可夫模型 (HMM) 工具箱由凯文墨菲撰写,1998 年。 最后更新:2005 年 6 月 8 日。 在 MIT 许可下分发 该工具箱支持对具有离散输出 (dhmm's)、高斯输出 (ghmm's) 或高斯输出混合 (mhmm's) ...
  • MATLAB编写的语音识别程序-基于隐马尔可夫模型的语音识别
  • 隐马尔可夫模型(Hidden Markov model, HMM)是一种结构最简单的动态贝叶斯网的生成模型,它也是一种著名的有向图模型。它是典型的自然语言中处理标注问题的统计机器学模型,本文将重点介绍这种经典的机器学习模型。 1...
  • 隐马尔可夫模型拟合到图像的轮廓波系数的 MATLAB 文件。 该软件包还包括将该模型用于去噪和纹理检索应用程序的功能。 这些函数基于 DD-Y 的期刊“Directional Multiscale Modeling of Images Using the ...
  • 隐马尔可夫matlab源码

    2018-09-09 18:58:33
    这里面的源码是自己实践的,绝对可用,还有多个例子可以学习,对了,用到是matlab,物有所值
  • Matlab中实现持续时间高阶隐马尔可夫模型(DHO-HMM)及其在语音识别中的应用。
  • 基于隐马尔可夫模型的态势评估方法
  • Amro..36我没有回答每个问题,而是让我演示如何使用HMM工具箱作为示例 - 在引入隐藏马尔可夫模型时通常使用的天气示例.基本上模型的状态是三种可能的天气类型:晴天,下雨和有雾.在任何一天,我们都假设天气只是这些值中...
  • 离散时间自回归隐马尔可夫模型的期权定价和对冲代码 资产收益建模 以下模型可供建模 HMM(隐藏的Markov模型) ARHMM(自回归隐藏马尔可夫模型) VHMM(多维隐藏隐藏马尔可夫模型) VARHMM(多维自回归隐式...
  • 由于研究需要,在网上找了不少关于隐马尔可夫模型MATLAB程序,可能是没有耐下心去看,总之感觉看懂别人写的程序很费劲,所以就自己动手写了一下。主要的参考书目是李航的《统计学习方法》,并实现了书中部分例题和...
  • 隐马尔可夫模型(Hidden Markov model, HMM)是一种结构最简单的动态贝叶斯网的生成模型,它也是一种著名的有向图模型。它是典型的自然语言中处理标注问题的统计机器学模型,本文将重点介绍这种经典的机器学习模型。 1...
  • Baum-Welch算法用来对隐马尔可夫模型的参数进行学习,Baum-Welch算法是EM算法的一种特例,属于非监督学习算法,下边第一部分程序的迭代次数为1的算法代码,其中调用了计算中所需要的两个变量Gamma和Xi的计算代码,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,282
精华内容 912
关键字:

隐马尔可夫模型matlab

matlab 订阅