HMM算法
来源:互联网 发布:抄板软件quickpcb 编辑:程序博客网 时间:2024/06/07 00:05
HMM算法
算法描述
Generating Patterns
Generating Patterns包括determination pattern和non- determiniation pattern 两种 ,在non-determiniation中,我们假设当下的状态仅与前k个状态有关,这种假设下得到的模型也就是K阶马尔科夫模型。当k=1时,得到1阶马尔科夫模型。
一阶马氏模型有以下三个要素:- 状态
- PI向量:系统初始化每个状态的概率
- 状态转移矩阵(该矩阵在系统生命周期内保持不变)
- Hidden Patterns
观察的状态->(隐藏的状态)->结果
引入:Hidden Markov Models
参数:三元组(PI,A,B)
PI:初始向量
A:转移矩阵
B:观测矩阵(或者混淆矩阵):包含了观察的状态与隐藏状态的关系
前向后向算法
input:Markov Model
output:观测序列概率
需要的公式:(
备注:这里的
这里的
维特比算法
思想:用动态规划(dynamic programming)求概率最大路径(最优路径)
input:Markov Model
output:最优路径
解法:
STEP1:
STEP2:
STEP3:
STEP4:最优路径回溯
得到最优路径:
注意到
代码编写(MATLAB)
主函数
%forward algotithmclc%===============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:numalpha(i)=PI(i)*B(i,O(1));endalpha%recursivefor k=2:Talpha=recursive(alpha,A,B,O(k),num)end%prob=0;for i=1:num prob=prob+alpha(i);endprob%======back algorithm method==============beta=ones(1,num)for k=0:T-2 beta=recursive1(beta,A,B,O(T-k),num);endprob=0;for i=1:num prob=prob+PI(i)*B(i,O(1))*beta(i);endprob%==========viterbi==========================viter=zeros(T,num);for i=1:numviter(1,i)=PI(i)*B(i,O(1));endviter%recursiveflag=2;path=zeros(T,num);for i=1:num path(1,i)=i;endfor 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:numsum=0;for j=1:numsum=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.28000.0280 0.0504 0.04200.0076 0.0101 0.01470.0019 0.0030 0.0022
path =
1 2 3 3 3 3 2 2 3 1 2 3
0 0
- HMM算法
- HMM之前向算法
- HMM算法学习
- HMM之前向算法
- Baumwelch 算法训练HMM
- 【机器学习】HMM算法
- 机器学习算法-HMM
- HMM的viterbi算法
- HMM-鲍姆-韦尔奇算法
- hmm-前向算法
- hmm-DTW算法
- hmm-前向算法
- 机器学习:HMM:算法
- HMM之Viterbi算法
- 【算法】 隐马尔可夫模型 HMM
- HMM 算法随记(1)
- hmm 算法(1)
- HMM之前向算法
- SpringMVC学习系列(9) 之 实现注解式权限验证
- 线程调度 http://blog.csdn.net/loyal_baby/article/details/4202083
- 获取手机内部所有应用的方法比较 PackageInfo、ResolveInfo
- 如何添加win7左侧边栏的桌面
- 游戏中的任务系统的简单架构!
- HMM算法
- Spring MVC 中 HandlerInterceptorAdapter的使用
- Android 操作系统获取Root权限 原理详细解析
- FusionCharts属性
- Xcode7 真机调试
- Android Service 双进程常驻后台(2)
- List分组
- 逻辑电路 - 与门And Gate
- 集体智慧总结和使用范围归纳(四)