首页 > 代码库 > 隐马尔可夫模型模型评估及最优路径的matlab实现
隐马尔可夫模型模型评估及最优路径的matlab实现
自己根据算法编写了两个简单的matlab代码,应用于例子中的数据取得了正确的解,这里并没有考虑速度优化的问题,请大家不吝指教:
1.模型评估
HMM模型如下,试根据前向算法计算产生观察符号序列O={ABAB}的概率。
状态转移概率矩阵
a = [0.4 0.6 0 ;
0 0.8 0.2;
0 0 1 ];
观测矩阵:
o= [0.7 0.3 0.7 0.3;
0.4 0.6 0.4 0.6;
0.8 0.2 0.8 0.2];
初始概率矩阵:
pi = [1 0 0];
例题中的计算步骤:
1.当t = 1时
2.当t = 2时
3.当t = 3时
4.当t = 4时
最终有:
P(O| λ)= a4(1)+ a4(2)+ a4(3)=0.0717696
matlab代码实现:
%a矩阵是状态转移矩阵a = [0.4 0.6 0 ; 0 0.8 0.2; 0 0 1 ];%o矩阵是观察矩阵,观测序列是ABAB%该o矩阵根据观测序列做了相应的扩展。o = [0.7 0.3 0.7 0.3; 0.4 0.6 0.4 0.6; 0.8 0.2 0.8 0.2];%pi是初始状态概率矩阵pi = [1 0 0];[n,n] = size(a);[n,T] = size(o);n = length(pi);alpha = zeros(n,T);%初始化t=1时刻的alpha矩阵for i = 1:n alpha(i,1) = pi(i)*o(i,1);endfor t = 1:T-1 for i = 1:n sum = 0; for j = 1:n sum = sum + alpha(j,t)*a(j,i); end alpha(i,t+1) = sum * o(i,t+1); endendP = 0;for i = 1:n P = P + alpha(i,T);endP
计算得到的P值为0.0718,与例题中得到的结果十分接近。
2.最优路径选择问题
例子中的计算步骤:
1.初始化:
2.当t = 2时
3.当t = 3时
4.当t = 4时
递推结果:
最优状态序列:
S1,S2,S2,S2.
matlab代码实现:
%a矩阵是状态转移矩阵a = [0.4 0.6 0 ; 0 0.8 0.2; 0 0 1 ];%o矩阵是观察矩阵,观测序列是ABAB%该o矩阵根据观测序列做了相应的扩展。o = [0.7 0.3 0.7 0.3; 0.4 0.6 0.4 0.6; 0.8 0.2 0.8 0.2];%pi是初始状态概率矩阵pi = [1 0 0];[n,n] = size(a);[n,T] = size(o);n = length(pi);derta = zeros(n,T);pha = zeros(n,T);maxer = zeros(n,n);%初始化t=1时刻的alpha矩阵for i = 1:n derta(i,1) = pi(i)*o(i,1);endfor t = 1:T-1 for i = 1:n nu = 0; for j = 1:n maxer(j,i) = derta(j,t)*a(j,i); end if max(maxer(:,i))==0 pha(i,t+1) = 0; else [nu,pha(i,t+1)] = max(maxer(:,i)); end derta(i,t+1) = nu * o(i,t+1); endenddertaphaP = 0;q = zeros(1,T);[P q(T)]= max(derta(:,T));for i = T-1:-1:1 q(i) = pha(q(i+1),i+1);endq
运行的结果是:
q =
1 2 2 2
可以看出是与例题中计算出的结果是一样的。
隐马尔可夫模型模型评估及最优路径的matlab实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。