zoukankan      html  css  js  c++  java
  • 前向算法的数学意义上的实现

    首先是前向算法

    前向算法demo文件:fwd_demo.m

     1 %% 前向算法的demo
     2 %% 验证的例子参见《统计学习方法》p177
     3 %%
     4 
     5 % (编码:红1,白2)
     6 % 初始概率分布
     7 pi=[0.2 0.4 0.4]
     8 
     9 % 概率转移矩阵
    10 A=[ 0.5   0.2   0.3;
    11     0.3   0.5   0.2;
    12     0.2   0.3   0.5]
    13 
    14 % 观察矩阵(发射矩阵)
    15 B=[ 0.5   0.5;
    16     0.4   0.6;
    17     0.7   0.3]
    18 
    19 % 观察序列
    20 O=[1,2,1]
    21 
    22 %%调用前向算法fwd(~)
    23 %% 
    24 format long         %% 为了尽量显示全小数部分
    25 p=fwd(O,A,B,pi)


    前向算法文件:fwd.m

     1 function p=fwd(o,a,b,pi)
     2 %% 参考:《统计学习方法》李航 p174
     3 % 暂时不使用向量化编程~
     4 %%
     5 %函数功能:一阶离散单观察序列HMM的前向算法(数学意义)
     6 %输入:
     7 %O=Given observation sequence labellebd in numerics
     8 %A(N,N)=transition probability matrix
     9 %B(N,M)=Emission matrix
    10 %pi=initial probability matrix
    11 %输出:
    12 %P=probability of given sequence in the given model
    13 %% 预先分配变量空间,赋值
    14 N=length(a(1,:));           %%  N=隐状态数
    15 T=length(o);                %%  T序列长度,也是时间~
    16 alpha=zeros(T,N);
    17 
    18 %前向算法主体
    19 for i=1:N        %(1)初值
    20     alpha(1,i)=b(i,o(1))*pi(i);         %% 对应(10.1521 end
    22 
    23 for t=1:(T-1)      %(2)递推
    24     for j=1:N
    25         sum=0;
    26         for i=1:N
    27             sum=sum+a(i,j)*alpha(t,i);
    28         end
    29         alpha(t+1,j)=sum*b(j,o(t+1));           %% 对应(10.1630     end
    31 end
    32 p=0;
    33 for i=1:N         %(3)终止
    34     p=p+alpha(T,i);        %% 对应(10.1735 end

    运行后的结果:

     1 >> fwd_demo
     2 
     3 pi =
     4 
     5     0.2000    0.4000    0.4000
     6 
     7 
     8 A =
     9 
    10     0.5000    0.2000    0.3000
    11     0.3000    0.5000    0.2000
    12     0.2000    0.3000    0.5000
    13 
    14 
    15 B =
    16 
    17     0.5000    0.5000
    18     0.4000    0.6000
    19     0.7000    0.3000
    20 
    21 
    22 O =
    23 
    24      1     2     1
    25 
    26 
    27 p =
    28 
    29     0.1302
    30 
    31 >> fwd_demo
    32 
    33 pi =
    34 
    35     0.2000    0.4000    0.4000
    36 
    37 
    38 A =
    39 
    40     0.5000    0.2000    0.3000
    41     0.3000    0.5000    0.2000
    42     0.2000    0.3000    0.5000
    43 
    44 
    45 B =
    46 
    47     0.5000    0.5000
    48     0.4000    0.6000
    49     0.7000    0.3000
    50 
    51 
    52 O =
    53 
    54      1     2     1
    55 
    56 
    57 p =
    58 
    59    0.130218000000000
  • 相关阅读:
    在typescript中interface和type的区别和相同点
    微信小程序常用的方法
    使用vite创建vue3项目
    JavaCV-流媒体开发系列文章(索引)
    Java 8 日期时间 API
    JavaFX桌面应用-JavaFX应用打包exe及构建安装包
    JavaCV 视频滤镜(LOGO、滚动字幕、画中画、NxN宫格)
    JavaCV 采集摄像头和麦克风数据推流直播
    JavaCV 采集摄麦克风音频数据
    JavaCV 采集摄像头及桌面视频数据
  • 原文地址:https://www.cnblogs.com/LzKlyhPorter/p/4865242.html
Copyright © 2011-2022 走看看