码迷,mamicode.com
首页 > 其他好文 > 详细

隐马尔可夫模型模型评估及最优路径的matlab实现

时间:2014-12-03 23:00:28      阅读:263      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   color   os   sp   for   on   数据   

自己根据算法编写了两个简单的matlab代码,应用于例子中的数据取得了正确的解,这里并没有考虑速度优化的问题,请大家不吝指教:

1.模型评估

HMM模型如下,试根据前向算法计算产生观察符号序列O={ABAB}的概率。 
bubuko.com,布布扣
状态转移概率矩阵
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时
bubuko.com,布布扣
2.当t = 2时
bubuko.com,布布扣
3.当t = 3时
bubuko.com,布布扣
4.当t = 4时
bubuko.com,布布扣
最终有:
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);
end

for 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);
    end
end

P = 0;
for i = 1:n
    P = P + alpha(i,T);
end
P

计算得到的P值为0.0718,与例题中得到的结果十分接近。

 

2.最优路径选择问题

例子中的计算步骤:

1.初始化:

bubuko.com,布布扣

2.当t = 2时

bubuko.com,布布扣

3.当t = 3时

bubuko.com,布布扣

4.当t = 4时

bubuko.com,布布扣

递推结果:

bubuko.com,布布扣

最优状态序列:

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);
end

for 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);
    end
end
derta
pha
P = 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);
end
q

运行的结果是:

q =

1 2 2 2

可以看出是与例题中计算出的结果是一样的。

隐马尔可夫模型模型评估及最优路径的matlab实现

标签:style   blog   io   color   os   sp   for   on   数据   

原文地址:http://www.cnblogs.com/bigpo/p/4141419.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!