HMM算法

原创 2015年11月18日 10:54:14

HMM算法


算法描述

  1. Generating Patterns
    Generating Patterns包括determination pattern和non- determiniation pattern 两种 ,在non-determiniation中,我们假设当下的状态仅与前k个状态有关,这种假设下得到的模型也就是K阶马尔科夫模型。当k=1时,得到1阶马尔科夫模型。
    一阶马氏模型有以下三个要素:

    • 状态
    • PI向量:系统初始化每个状态的概率
    • 状态转移矩阵(该矩阵在系统生命周期内保持不变)
  2. Hidden Patterns
    观察的状态->(隐藏的状态)->结果
    引入:Hidden Markov Models

建模过程

参数:三元组(PI,A,B)
PI:初始向量
A:转移矩阵
B:观测矩阵(或者混淆矩阵):包含了观察的状态与隐藏状态的关系
前向后向算法
input:Markov Model λ=(A,B,π),观察序列O
output:观测序列概率P(O|λ)
需要的公式:(i=1,2,.....N)
α1(i)=πibi(o1)
αt+1(i)=[Nj=1αt(j)aji]bi(ot+1)
βT(i)=1
βt(i)=Nj+1aijbj(ot+1)βt+1(j)
P(O|λ)=Ni=1Nj=1αt(i)aijbj(ot+1)βt+1(j)
备注:这里的αt(i)定义为前向概率

αt(i)=P(o1,o2,...ot,it=qi|λ)

这里的βt(i)定义为后向概率
βt(i)=P(ot+1,ot+2,...,oT|it=qi,λ

维特比算法
思想:用动态规划(dynamic programming)求概率最大路径(最优路径)
input:Markov Model λ=(A,B,π),观察序列O
output:最优路径I
解法:
STEP1:
δ1(i)=πibi(o1)
ψ1(i)=0
STEP2:
δt(i)=max1jN[δt1aji]bi(ot)
ψt(i)=argmax[δt1(j)aji]
STEP3:
P=maxδT(i)
iT=argmax[δT(i)]
STEP4:最优路径回溯
it=ψt+1(tt+1)
得到最优路径:I=(i1,i2,...,iT)


注意到δα的算法是很相似的,不同在于前者是取最大值,后者是求和。
代码编写(MATLAB)
主函数

%forward algotithm
clc
%===============data===================
A=[0.5,0.2,0.3;0.3,0.5,0.2;0.2,0.3,0.5];
B=[0.5,0.5;0.4,0.6;0.7,0.3];
PI=[0.2,0.4,0.4];
Q=[1,2,3];
T=4;%[~,T]=size(O)
O=[1,2,1,2];
%======forward algorithm method========
alpha=[];
%calculate initial value
[~,num]=size(Q);
for i=1:num
alpha(i)=PI(i)*B(i,O(1));
end
alpha
%recursive
for k=2:T
alpha=recursive(alpha,A,B,O(k),num)
end
%
prob=0;
for i=1:num
    prob=prob+alpha(i);
end
prob
%======back algorithm method==============
beta=ones(1,num)
for k=0:T-2
    beta=recursive1(beta,A,B,O(T-k),num);
end
prob=0;
for i=1:num
    prob=prob+PI(i)*B(i,O(1))*beta(i);
end
prob
%==========viterbi==========================
viter=zeros(T,num);
for i=1:num
viter(1,i)=PI(i)*B(i,O(1));
end
viter
%recursive
flag=2;
path=zeros(T,num);
for i=1:num
    path(1,i)=i;
end
for k=2:T
[viter(k,:),path(flag,:)]=viterbi(viter(k-1,:),A,B,O(k),num)
flag=flag+1;
end

function [outputarray]=recursive(inputarray,A,B,position,num)
outputarray=[];
for i=1:num
    sum=0;
    for j=1:num
        sum=sum+inputarray(j)*A(j,i);
    end
    outputarray(i)=B(i,position)*sum;
end

function [outputarray]=recursive1(inputarray,A,B,position,num)
outputarray=[];
for i=1:num
sum=0;
for j=1:num
sum=sum+A(i,j)*B(j,position)*inputarray(j);
end 
outputarray(i)=sum;
end

function [outputarray,path]=viterbi(inputarray,A,B,position,num)
outputarray=[];
path=[];
for i=1:num
    for j=1:num
        temp(j)=inputarray(j)*A(j,i);
    end
    outputarray(i)=B(i,position)*max(temp);
    path(i)=find(temp==max(temp));
end

结果输出

alpha =

0.1000    0.1600    0.2800

alpha =

0.0770    0.1104    0.0606

alpha =

0.0419    0.0355    0.0528

alpha =

0.0211    0.0252    0.0138

prob =

0.0601

prob =

0.0601

viter =

0.1000    0.1600    0.2800
0.0280    0.0504    0.0420
0.0076    0.0101    0.0147
0.0019    0.0030    0.0022

path =

 1     2     3
 3     3     3
 2     2     3
 1     2     3
版权声明:本文为博主原创文章,未经博主允许不得转载。

隐马尔可夫(HMM)、前/后向算法、Viterbi算法 再次总结

本总结是是个人为防止遗忘而作,不得转载和商用。         说明:此篇是作者对“隐马尔可夫模型”的第二次总结,因此可以算作对上次总结的查漏补缺以及更进一步的理解,所以很多在第一次总结中已经整理过的...
  • xueyingxue001
  • xueyingxue001
  • 2016年09月01日 10:00
  • 7248

HMM的应用与Forward算法、Viterbi算法

隐马尔科夫模型(HMM)是机器学习中的一种重要技术,也是一种PGM。HMM在自然语言处理、图像处理和计算机视觉等领域都有重要应用。而要深入了解HMM,就不得不谈到用于评估、预测和 Decoding 的...
  • baimafujinji
  • baimafujinji
  • 2016年05月06日 15:04
  • 9840

HMM学习笔记_3(从一个实例中学习Viterbi算法)

在上一篇博客http://www.cnblogs.com/tornadomeet/archive/2012/03/24/2415583.html中,我们已经从一个例子中学会了HMM的前向算法,解决了H...
  • king16304
  • king16304
  • 2016年09月13日 20:48
  • 337

HMM算法在语音识别中的应用——算法学习

总体框架输入Treat acoustic(听觉的) input O as sequence of individual observations O=o1,o2,...,otO=o_1,o_2,.....
  • u010598445
  • u010598445
  • 2016年06月15日 14:04
  • 1743

隐马尔科夫模型HMM的前向算法和后向算法

最近重新看了一遍《统计学习方法》中第十章《隐马尔可夫模型》,更加觉得这本书有浅有深,简洁深刻。HMM模型有三个基本问题:概率计算问题,学习问题和预测问题。今天我就来将其中的概率计算问题的一些细节思考总...
  • njustzj001
  • njustzj001
  • 2016年03月22日 16:43
  • 9387

HMM——前向算法与后向算法

HMM的前向算法
  • zb1165048017
  • zb1165048017
  • 2015年09月19日 19:27
  • 3260

HMM的介绍及实现

HMM基本原理 Markov链:如果一个过程的“将来”仅依赖“现在”而不依赖“过去”,则此过程具有马尔可夫性,或称此过程为马尔可夫过程。马尔可夫链是时间和状态参数都离散的马尔可夫过程。HMM是在Ma...
  • resourse_sharing
  • resourse_sharing
  • 2017年01月22日 10:54
  • 1005

HMM预测算法——Viterbi算法

**HMM预测算法——Viterbi算法** HMM是一个生成模型,表示状态序列和观测序列的联合分布,但是状态序是隐藏的,不可观测的。 Viterbi算法实际上用动态规划(dynamic pro...
  • BD_Jiang
  • BD_Jiang
  • 2016年09月18日 08:39
  • 1814

HMM模型之viterbi算法

1、前言 viterbi算法是HMM模型的三大算法之一。HMM模型解决三大问题:评估、解码和学习。viterbi用于解决解码问题,在自然语言处理中用于解决划分问题,分词是对于句子的划...
  • zhdgk19871218
  • zhdgk19871218
  • 2015年06月01日 13:40
  • 1169

隐马尔可夫模型(HMM)的MATLAB实现——Viterbi算法

维特比算法实际是用动态规划求解隐马尔可夫模型解码问题,即用动态规划求概率最大路径(最优路径)。代码中有示例,来自李航《统计学习方法》 function [Delta,Psi,P,I] = Viter...
  • sinat_36005594
  • sinat_36005594
  • 2017年03月31日 17:08
  • 2791
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HMM算法
举报原因:
原因补充:

(最多只允许输入30个字)