QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1546|回复: 0
打印 上一主题 下一主题

隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱

[复制链接]
字体大小: 正常 放大
杨利霞        

5273

主题

82

听众

17万

积分

  • TA的每日心情
    开心
    2021-8-11 17:59
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

    自我介绍
    本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2020-5-9 17:36 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta

      Z# k3 R& T, @5 O- @隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱% ~  O3 n8 k' u) Q4 Z
    % ①定义一个HMM并训练这个HMM。# B# \: M+ x9 g8 T
    % ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。
    , ?9 t$ w  R, y5 V( ]% 修改:旺齐齐
    $ _& e( z/ Z" A% P4 R3 W% 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。  G4 {9 A& |. f3 O) `3 A9 ?
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % O:观察状态数# w) `; Z/ C- @, f+ b
    O = 7;
    6 s2 ~  ^0 I5 l5 ]6 a! T. PO2 = 7;
    4 `1 W7 H: q, \1 {5 I& K* Q% Q:HMM状态数
    . h  f- W- B, k. b4 WQ = 5;
    , D7 z1 J& h9 Z" o! QQ2 = 5;
    + O) b, n3 w" a/ K3 Q) w0 U6 O" F%训练的数据集,每一行数据就是一组训练的观察值
    7 d1 Q5 ^0 X2 V; U! _# c- P) pdata=[1,2,3,1,2,2,4,2,3,1,2,7,2;
    7 J* Z! a3 f7 m" ^  {# {& P) G7 Y7 W% e      1,2,3,6,2,2,1,4,3,1,5,3,1;
    % a& V9 P, z+ A# R5 P2 L7 R! E      1,2,3,1,2,5,1,2,4,1,2,3,2;
    2 C- p. @3 e# p; ]/ {      1,2,7,1,2,2,1,2,5,1,2,4,1;$ g+ w/ M/ D) R7 Z& i
          5,2,3,3,5,2,1,2,3,1,2,3,6;
    ' M2 R% [2 e- ~% p& f1 ?/ v) H      1,2,3,1,2,2,1,6,5,1,2,6,4;+ {& Q. y4 o4 X* b, Q
          5,2,3,4,4,2,1,2,3,1,2,5,6;
    7 r- t. |4 u' r& f' K& a      1,2,6,1,2,2,1,2,3,1,4,3,2;
    & ~( U! l$ D7 o( d2 d0 J      1,2,3,4,2,7,1,4,3,1,7,3,3;2 R1 B% E) ]/ G) A; S! W; h& n
          5,2,3,5,2,2,1,2,3,1,2,3,4;
    / f' N* u# B) z" l/ `& Q. g5 h      5,2,4,1,2,2,5,2,3,7,1,6,2;]
    ! |4 J0 P& A* [+ y% c, \
      data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;
    2 }9 ]4 D1 _. u7 M0 i( ?& b          1,2,3,6,2,2,1,4,3,1,5,3,1;
    " l2 A% [9 o6 ?# e* `          1,2,3,1,2,5,1,2,4,1,2,3,2;) w3 J) h2 T2 L
              1,2,7,1,2,2,1,2,5,1,2,4,1;
      u' h& T8 ?, o2 k          5,2,3,3,5,2,1,2,3,1,2,3,6;. f  W/ d3 L# H% w: L- U  L+ k7 \
              1,2,3,1,2,2,1,6,5,1,2,6,4;
    0 ^  y' l# @- C          5,2,3,4,4,2,1,2,3,1,2,5,6;
    + c( _9 m2 g' k1 Q8 r2 ^          1,2,6,1,2,2,1,2,3,1,4,3,2;, @, y/ K8 @  K; U
              1,2,3,4,2,7,1,4,3,1,7,3,3;
    + [- I5 s. |' d/ o          5,2,3,5,2,2,1,2,3,1,2,3,4;) |9 @3 m' ?3 r1 _
              4,2,5,1,2,2,6,2,3,7,1,6,4;]
    % initial guess of parameters
    4 S3 e9 o4 C: B- e0 u5 ?( S% 初始化参数& e: W# u! X- h% F7 n! n) X
    prior1 = normalise(rand(Q,1));( `- h- d) r5 w( {
    transmat1 = mk_stochastic(rand(Q,Q));
    2 }, q  q. I' U1 ~$ dobsmat1 = mk_stochastic(rand(Q,O));
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%( U8 C3 J# V$ R
    % 添加部分
    - L. T( i* T9 |# Q3 B4 Z    prior3 = normalise(rand(Q2,1));' a1 |- Z, x7 [: z" k) ^0 p
        transmat3 = mk_stochastic(rand(Q2,Q2));
    ' ^" Q- p* R& [: x: I: b& n( g1 t    obsmat3 = mk_stochastic(rand(Q2,O2));& L- W+ l# u# [
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % improve guess of parameters using EM
    + v- D0 y" y; }) s+ U: ^1 E% 用data数据集训练参数矩阵形成新的HMM模型
    ! s& M2 O" g  r# S1 H+ D! G. A[LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));
    7 [( Q! R+ z0 ~0 H3 d: _% 训练后那行观察值与HMM匹配度9 a) W2 H; V% h# e0 ]/ g" C
    LL, S# E: O; {( y
    % 训练后的初始概率分布- F- d. O5 Z+ g: a3 I  N4 z
    prior2" q/ h2 m( ~  A, r
    % 训练后的状态转移概率矩阵
    ) Q% `" s2 [! Atransmat2
    . h1 g+ Q# {: d% 观察值概率矩阵( P" N  q3 w! p, k" D* x- T
    obsmat2
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$ u8 C0 D2 i% B) C# v3 L, w. G; r
    % 添加部分
    ' }' x& K. T$ A7 t. t    [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));
    & k9 I" c9 O5 R5 w5 C) y( o6 p    LL2
    ) e8 U- ~7 V- b5 s9 A5 G    prior46 F5 q# F9 j$ a) d8 i+ E
        transmat4
    $ U* I3 {9 T8 C8 \* b# T2 `    obsmat4' c- ]5 M7 z+ e% G& s1 h$ h
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % use model to compute log likelihood
    : G% i0 O* ]7 G7 ^% data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]/ F1 u  ~  D; p8 o" W5 y
    data1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]
    . e- M/ R4 @$ u% u+ K- k' f: Wloglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)
    & j! f1 o2 F2 r% log lik is slightly different than LL(end), since it is computed after the final M step- r' P6 B' M% f2 s% I# d& J
    % loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
    % path为viterbi算法的结果,即最大概率path
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ! i- S. ?) ]8 J/ w! h9 d& J5 U% 添加部分" Q- a" C8 v/ b5 l7 v: P/ E/ |
    loglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)
    ! [  R& ~1 p& r: e8 ~& G- b0 h%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    $ B* j$ D+ {2 _; S
    B = multinomial_prob(data1,obsmat2);
    ; h7 F) ?, v, h! Q7 mpath = viterbi_path(prior2, transmat2, B)
    ( \" U! V- e) F4 i9 J3 rsave('sa.mat');
    $ M. {+ ^1 G* G/ l$ |
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Z5 K6 H( _& b+ @. P/ P* c7 Y
    % 添加部分
    5 u; r1 P: S1 B9 E; ]' \    B2 = multinomial_prob(data1,obsmat4);  K, y- m% f1 }0 |: f
        path2 = viterbi_path(prior4, transmat4, B2); O! ~0 T8 P/ F0 p% G; ?
        save('sa2.mat');
    8 Z5 ~1 U5 E1 D1 L0 y    if loglik2 > loglik + @3 R& a- O; M! ~+ I
            fuhe = 2# k" t; O9 X: m4 C. R3 e
        else2 f0 O/ a) |3 N$ N% U( e/ Z
            fuhe = 1% F! {# b3 R3 @* f3 W" O4 E0 v
        end   
    . O! ~  p4 ~1 \% g# n  V7 X%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ------
    运行结果
    ------
    data =
         1     2     3     1     2     2     4     2     3     1     2     7     2. a: p4 S& ^2 H1 [$ W' {- i
         1     2     3     6     2     2     1     4     3     1     5     3     13 _' Y( G0 C" ?
         1     2     3     1     2     5     1     2     4     1     2     3     24 g# x8 F5 y/ [& t1 I- [8 Y: d
         1     2     7     1     2     2     1     2     5     1     2     4     1& P9 _! N" y* ^' N9 K
         5     2     3     3     5     2     1     2     3     1     2     3     6! E, c2 j3 u! J3 e# F5 f) V, \$ Z- H
         1     2     3     1     2     2     1     6     5     1     2     6     4& n. p: `3 v  w: J
         5     2     3     4     4     2     1     2     3     1     2     5     6
    0 ?: x& \$ Q( Q/ M8 E     1     2     6     1     2     2     1     2     3     1     4     3     2( G" Q% h" }# ]1 s/ b2 Z, J
         1     2     3     4     2     7     1     4     3     1     7     3     3
    7 ]9 e+ R" P! u     5     2     3     5     2     2     1     2     3     1     2     3     48 X6 l6 ?9 Z  R2 q, Q
         5     2     4     1     2     2     5     2     3     7     1     6     2

    / d$ u7 x( s3 B# r% Vdata2 =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    / ^5 |5 h2 u) N+ a; P7 m8 ^; @     1     2     3     6     2     2     1     4     3     1     5     3     1' j$ Z8 c) b0 j" C  o: U( y  b1 _
         1     2     3     1     2     5     1     2     4     1     2     3     2
    - E' n$ }8 z4 _/ c; ?4 ?2 Q2 y     1     2     7     1     2     2     1     2     5     1     2     4     1
      P% I( p2 C* [" H3 ^( S     5     2     3     3     5     2     1     2     3     1     2     3     6% m5 u, f( @  S
         1     2     3     1     2     2     1     6     5     1     2     6     4
    # F- R/ C9 R- x  K$ }: m8 p     5     2     3     4     4     2     1     2     3     1     2     5     6; M0 k; D' Q5 s  r2 b
         1     2     6     1     2     2     1     2     3     1     4     3     2( J7 G2 K# P5 b7 k
         1     2     3     4     2     7     1     4     3     1     7     3     3
    ' |, C- t2 g& X$ }9 M, H1 R( a( U     5     2     3     5     2     2     1     2     3     1     2     3     4
    2 W+ I, E2 Q1 s2 e& H1 ]& I     4     2     5     1     2     2     6     2     3     7     1     6     4
    iteration 1, loglik = -327.100465
    ( N7 a! K+ ^4 n. _7 Qiteration 2, loglik = -238.2598125 T1 R% o, u1 {$ Q/ e' T' i; S
    iteration 3, loglik = -232.962948
    + I8 }  H9 u7 U/ }7 `& y) yiteration 4, loglik = -223.323891
    & {3 ~$ C) i: O4 Jiteration 5, loglik = -207.6308757 y. e2 V: T4 Y: u6 p
    iteration 6, loglik = -191.012697
    - m3 O4 r+ p! P8 }+ F- [7 fiteration 7, loglik = -178.611546/ E& U6 s$ K4 Z7 v, c
    iteration 8, loglik = -171.524132' a, }) i1 X: B2 V% F8 R) _- W
    iteration 9, loglik = -168.626526; k9 v+ [/ u, X9 k3 `
    iteration 10, loglik = -167.3870572 R3 l1 ]. f3 A
    iteration 11, loglik = -166.689175
    LL =
      Columns 1 through 9
    -327.1005 -238.2598 -232.9629 -223.3239 -207.6309 -191.0127 -178.6115 -171.5241 -168.6265
      Columns 10 through 11
    -167.3871 -166.6892

    ) F- [; c; u1 p" Gprior2 =
        0.00005 C- U% Z4 M; F  W" B8 W
        0.0000
    & i" J5 _3 t% _    1.00007 `* d2 L/ s$ {- S5 O
        0.0000
    " }: v  E; D$ w# F) I- s/ o    0.0000

    " {5 e$ M% v. n' [$ r" g3 c0 Atransmat2 =
        0.0138    0.0089    0.7680    0.1060    0.1033( L1 f1 p9 B5 J2 u/ J' q
        0.7811    0.0000    0.0199    0.0067    0.1923
    6 V/ g1 d1 u" e7 J' @2 E    0.0000    0.9936    0.0000    0.0064    0.0000
    5 Y$ A5 a) B3 b8 f3 Q! y5 }    0.1686    0.2604    0.2242    0.3398    0.0070
    0 n, n# l: v. D9 M, O2 L    0.0053    0.0406    0.8350    0.1184    0.0007
    / w5 q7 B, ~: N8 ]% T
    obsmat2 =
        0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.0351
    , r5 S0 `7 i6 }3 Z1 I  ?+ G    0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.0228
    ' w$ _9 g6 e6 c    0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.0000/ f% o4 A, p( N+ Y
        0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.00553 z% G! Q6 p5 W
        0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
    iteration 1, loglik = -277.738670' Z8 ~$ p* k0 N: d2 q
    iteration 2, loglik = -242.163247
    : I0 t6 O1 z# I9 K4 b4 oiteration 3, loglik = -238.321971
    ; ?' `2 p5 s+ R8 h5 yiteration 4, loglik = -233.166746
    9 Y2 j5 u2 V$ O: K5 titeration 5, loglik = -225.682259$ U) t$ G9 |0 h
    iteration 6, loglik = -214.5602963 ]' d+ H0 z) q4 Z5 n5 s# o; u
    iteration 7, loglik = -201.182015
    3 E. C: Y& h8 J2 ^* Giteration 8, loglik = -189.427453
    3 m4 L0 X! w! ^7 M& b* ]iteration 9, loglik = -179.1563525 U% F& Q/ ~7 ]7 ?  N6 j
    iteration 10, loglik = -171.744096
    * h9 o& t2 Z! h" W( H# K3 `8 Viteration 11, loglik = -168.409063
    LL2 =
      Columns 1 through 9
    -277.7387 -242.1632 -238.3220 -233.1667 -225.6823 -214.5603 -201.1820 -189.4275 -179.1564
      Columns 10 through 11
    -171.7441 -168.4091
    6 F5 W  ]0 }& }4 ?8 g
    prior4 =
        0.0000
    " O# Y8 x: f7 U  \  H4 v    0.99820 N5 Z; p# ~0 e$ v& O, D0 H
        0.0004) t# ^3 q7 ~6 |
        0.0014
    7 v4 B8 l. ?. G/ ^. O8 {% ]  O    0.0000

    $ a, a! h0 j- t5 J8 W; Y4 _transmat4 =
        0.0873    0.5277    0.2799    0.1007    0.00457 ?* |: Q& s" a, `% C( l) t
        0.0002    0.0000    0.0005    0.0000    0.9994
    + Z6 Z$ H/ u) B  M8 r$ G    0.0180    0.0000    0.0118    0.0011    0.9692& M" @' ~) L  y: @: u" ]+ }# P" ^6 ?
        0.0436    0.0226    0.0810    0.0219    0.8310$ J6 @+ P+ y5 t3 r8 w/ A) Y
        0.9746    0.0056    0.0003    0.0195    0.0000

    0 W6 O4 \  i* w; f, @" G( yobsmat4 =
        0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.07703 M+ N! S  }- q, e7 t% c
        0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.0000% r% M# k% z+ J7 f- P
        0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001
    % A0 c. P( ?7 T    0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.0802* a$ ^$ }7 z1 H) j: k
        0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225

    7 X0 Q% I3 H3 s; l6 w- odata1 =
         5     2     4     1     2     2     5     2     3     7     1     6     2

    ) Z3 C4 S# v* B( l, _+ a+ r1 Zloglik =
      -19.2351

    ; p: K( M" u0 o4 Gloglik2 =
      -21.0715

    $ {$ ~5 t% U% ~" m3 D; rpath =
         3     2     5     3     2     1     3     2     1     5     3     2     1

    7 X. H# J) U$ h. O9 ~! lpath2 =
         2     5     1     2     5     1     2     5     1     1     2     5     1

    0 p# p) l! J7 ^% A7 X% S! f- z: u0 k8 ^fuhe =
         1
    5 N& u, }7 h* I
    8 _; W! r+ A( W4 W9 O8 o- r! u, u
    ) a) w& C- b: z  |/ P' ^# }

    HMM工具箱.rar

    399.79 KB, 下载次数: 0, 下载积分: 体力 -2 点

    售价: 5 点体力  [记录]  [购买]

    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2025-8-22 21:36 , Processed in 0.413604 second(s), 54 queries .

    回顶部