QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1722|回复: 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
    5 o1 V, W, C. d% U" G8 W) |
    隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱
    9 u. V1 Y! A9 O; j2 K6 g
    % ①定义一个HMM并训练这个HMM。
      A1 n# {  K" z% ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。
    " h: o$ K# K$ z6 t( y) y  Q% 修改:旺齐齐
    # p/ |$ I& Z+ U$ v% 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。  J, R; `! W* l. q
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % O:观察状态数. l8 Y! r8 {, a' }: {4 V
    O = 7;  e6 i6 |1 Y* u$ Y3 K) y
    O2 = 7;. a9 i6 T: e9 ]" t+ Q
    % Q:HMM状态数
    " Z3 Q- g- A2 W) H' GQ = 5;4 _: Z: o  Q  @5 z( O( u
    Q2 = 5;
    $ o: V4 Z, X- ~6 P" U%训练的数据集,每一行数据就是一组训练的观察值
    7 k- }, O" m! `0 mdata=[1,2,3,1,2,2,4,2,3,1,2,7,2;; R+ r& I- f, F
          1,2,3,6,2,2,1,4,3,1,5,3,1;' d( C5 o; }+ P" z) {" J
          1,2,3,1,2,5,1,2,4,1,2,3,2;# X" B. I: F- `( e
          1,2,7,1,2,2,1,2,5,1,2,4,1;) ?) i! g7 C5 \) @9 n
          5,2,3,3,5,2,1,2,3,1,2,3,6;
    - U( j- X6 v8 [* f      1,2,3,1,2,2,1,6,5,1,2,6,4;" M4 `" ~1 W1 \; k
          5,2,3,4,4,2,1,2,3,1,2,5,6;
    1 [/ ]: W9 z( k6 E/ X/ n5 d: }; ~      1,2,6,1,2,2,1,2,3,1,4,3,2;
    8 H- u. I- A9 u$ c5 u9 u7 I      1,2,3,4,2,7,1,4,3,1,7,3,3;
    ! i0 K. q) Y3 a" _# n* r& u      5,2,3,5,2,2,1,2,3,1,2,3,4;' p3 N4 N1 w8 d, R; n  U
          5,2,4,1,2,2,5,2,3,7,1,6,2;]

    * @8 \5 I$ |# s+ `. m; }4 B( z* x  data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;
    # y6 v0 t  u; b# L% n$ ^' K9 t          1,2,3,6,2,2,1,4,3,1,5,3,1;4 a% v7 X; E- J0 V
              1,2,3,1,2,5,1,2,4,1,2,3,2;3 \+ M3 S6 P2 r" n# T- ^
              1,2,7,1,2,2,1,2,5,1,2,4,1;6 x0 X9 \* V  M1 D' m7 g
              5,2,3,3,5,2,1,2,3,1,2,3,6;
    1 `, J# e+ K% H8 `          1,2,3,1,2,2,1,6,5,1,2,6,4;
    7 N2 `0 _% |: `* i, i- x& c6 M          5,2,3,4,4,2,1,2,3,1,2,5,6;: h' L4 s" {  g0 e0 Z
              1,2,6,1,2,2,1,2,3,1,4,3,2;
    $ r" \; R3 D7 [% C( n! {+ U- _          1,2,3,4,2,7,1,4,3,1,7,3,3;# {; }/ O5 M) y2 A0 P9 o' t8 P# r* A
              5,2,3,5,2,2,1,2,3,1,2,3,4;6 V6 N1 O5 z3 }
              4,2,5,1,2,2,6,2,3,7,1,6,4;]
    % initial guess of parameters
    : F& n* V2 U: m) Y. p" |% p% 初始化参数
    2 ?6 u8 |  f8 B1 qprior1 = normalise(rand(Q,1));" H0 S, o0 x0 y- Q( l1 x
    transmat1 = mk_stochastic(rand(Q,Q));+ H) c$ L: n- Q* y4 X- N
    obsmat1 = mk_stochastic(rand(Q,O));
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%9 j! a, D1 Z- q; n: _
    % 添加部分% s( x$ v0 H% n5 i2 G- `
        prior3 = normalise(rand(Q2,1));
    ; k2 p- m$ m7 `# ^    transmat3 = mk_stochastic(rand(Q2,Q2));
    - w8 K0 R0 }  m1 O6 I3 y    obsmat3 = mk_stochastic(rand(Q2,O2));1 [3 b1 O& s9 Z& x
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % improve guess of parameters using EM* f/ z- W" X3 A7 ?& @
    % 用data数据集训练参数矩阵形成新的HMM模型
    7 E. ^9 s; Z  h$ |[LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));  E2 U$ C% q8 [" B, P: ~
    % 训练后那行观察值与HMM匹配度4 P& b+ ^1 `" l  L9 X
    LL
    : S/ T! k& H* a1 U% 训练后的初始概率分布/ ^) y8 f3 l7 _: Z% H! l  G5 R
    prior2
    ' V9 X6 E, A% X; `, P$ O% 训练后的状态转移概率矩阵
    / w; `! y) r) a, X& g6 A( @8 i# D! Gtransmat2& w( @% F2 w. `% j
    % 观察值概率矩阵
      }0 H. n9 A) E, p* U2 Jobsmat2
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    * g& f3 P1 ^2 ?* {7 }% 添加部分  ]+ K* K: K/ P( i: F; k. t- H
        [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));
      ?, |- m- Y' `; [2 j3 n    LL2
    1 C( L4 y' _. e! ^. X    prior4  s* D% F+ d. ?: H* R$ C" Z5 q
        transmat4
    ' E7 l& k5 [  z) N" H8 v5 F    obsmat4
    / d- e: C5 x2 d. V$ c%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % use model to compute log likelihood- K& G* Z# Y, O
    % data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]
    7 A! W' c& [: a5 mdata1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]
    ' c3 Z& Z3 |+ W! k: hloglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)
    3 I- g  [- v& d! U$ J% log lik is slightly different than LL(end), since it is computed after the final M step8 G+ y, @% B% [- S/ x# F. G
    % loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
    % path为viterbi算法的结果,即最大概率path
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    # c7 f7 ~, J3 A2 U% c- |2 r% 添加部分, ^0 P7 A' e- u# H- C# C
    loglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)+ ]0 M% G/ l4 c8 t: v% p" H
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    3 f$ p' o& ]7 i2 l0 ^( k& VB = multinomial_prob(data1,obsmat2);
    " W, w7 Z. v4 T* Q' U, Ipath = viterbi_path(prior2, transmat2, B)
    9 e8 A8 `& q+ A( F4 W$ esave('sa.mat');

    - s! q, z! O8 g' L3 F2 F%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    / E; ]7 ?: |7 s! G4 e/ P) r* H% 添加部分
    ( v& \7 K' @$ y- [. v5 e& r: `    B2 = multinomial_prob(data1,obsmat4);: c1 h5 l( Y5 p6 M% P/ b4 ?
        path2 = viterbi_path(prior4, transmat4, B2)( A. }3 q! q% J+ p/ z% c" }) p
        save('sa2.mat');
    7 O' e" K0 l  o( ]    if loglik2 > loglik + t, [3 c* _) n) t: C$ y
            fuhe = 2" S4 r0 t. w' }. q
        else) k% C) c  A. v; N" ?# r* c' ~
            fuhe = 1! Z4 [8 [7 Y% s$ [* }
        end    2 w1 X  H5 e1 Z% l5 i
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ------
    运行结果
    ------
    data =
         1     2     3     1     2     2     4     2     3     1     2     7     22 x/ l+ ^- l, z7 [4 I! H
         1     2     3     6     2     2     1     4     3     1     5     3     17 `; r' I" O& C
         1     2     3     1     2     5     1     2     4     1     2     3     2
    ' O. e! C4 A9 S" t" J; [     1     2     7     1     2     2     1     2     5     1     2     4     1# j0 f  w$ Z9 U0 d% l$ R4 ~
         5     2     3     3     5     2     1     2     3     1     2     3     6) ?8 W/ E7 w! V0 }
         1     2     3     1     2     2     1     6     5     1     2     6     4: `" Q* x" u2 X1 R  ~9 ~) K
         5     2     3     4     4     2     1     2     3     1     2     5     6
    8 y: b/ H# v9 Z& }     1     2     6     1     2     2     1     2     3     1     4     3     23 A: j' X% C! \  v7 o: l5 @& J
         1     2     3     4     2     7     1     4     3     1     7     3     3
    " y$ n4 A& n& c7 |! U     5     2     3     5     2     2     1     2     3     1     2     3     4
    % ~# D+ ~2 T) T( _8 J5 Q' V+ Z     5     2     4     1     2     2     5     2     3     7     1     6     2

    # u* h0 o" Y) Vdata2 =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    * j; i' G* N+ \: d, q0 R     1     2     3     6     2     2     1     4     3     1     5     3     1
      p/ }7 t5 B5 t$ Y     1     2     3     1     2     5     1     2     4     1     2     3     2
    ' i7 {$ e; {) }0 x# ]9 ?     1     2     7     1     2     2     1     2     5     1     2     4     1
      A% l: Z) r$ Q5 |9 w     5     2     3     3     5     2     1     2     3     1     2     3     67 _6 C; j+ B) Q" ?3 z5 ?8 M# c
         1     2     3     1     2     2     1     6     5     1     2     6     4: {9 p4 H9 W) h
         5     2     3     4     4     2     1     2     3     1     2     5     63 O$ r  [0 D0 a9 m7 U1 I
         1     2     6     1     2     2     1     2     3     1     4     3     2
    * K, l- y6 O0 P2 }4 {     1     2     3     4     2     7     1     4     3     1     7     3     3
    ( y4 I5 s: k. |1 K* p. I+ t( C     5     2     3     5     2     2     1     2     3     1     2     3     4
    3 }6 z0 X3 f: O* Y& J     4     2     5     1     2     2     6     2     3     7     1     6     4
    iteration 1, loglik = -327.100465
    ' B+ f; ~4 m+ c5 r8 z6 s' Viteration 2, loglik = -238.259812
    # }( s0 x( t! V# e8 aiteration 3, loglik = -232.962948$ C7 K. ~% k& D2 E! g, R+ ]8 k& N
    iteration 4, loglik = -223.323891
    8 @) m$ E8 b/ L/ c' {: R& citeration 5, loglik = -207.630875
    + z& ]) k. y: i& [: d0 P+ V: j0 }iteration 6, loglik = -191.012697
    6 T+ X% _3 c/ \! h: B. viteration 7, loglik = -178.611546* f! t& X/ h$ I- _' S% R
    iteration 8, loglik = -171.524132# J9 j* ]; H& \2 s
    iteration 9, loglik = -168.6265266 a& \' f& S% h* G- D0 K6 n) e
    iteration 10, loglik = -167.387057
    5 @7 z$ i$ m- D" E5 e2 Yiteration 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

      v: i; a$ ?- C  Hprior2 =
        0.0000$ Q+ Y2 `2 T& Y3 k: Y+ b' z7 x
        0.00003 z7 |1 ?( _7 ?* ]  Y- m
        1.0000& P/ Z% n* j7 U0 w$ L, L' a! J" \% \
        0.0000
    7 Z& ~& v& z. w- ^    0.0000

    3 p3 i' f; ^4 L' P* h/ y, w  b+ Qtransmat2 =
        0.0138    0.0089    0.7680    0.1060    0.1033. U2 C, b4 Z5 Y4 {. P
        0.7811    0.0000    0.0199    0.0067    0.1923
    ' e3 e4 [3 }! Y) B* Y1 J. g9 ~    0.0000    0.9936    0.0000    0.0064    0.0000
    6 I0 ~6 K% \( G: V4 K- I    0.1686    0.2604    0.2242    0.3398    0.00706 L* Q) |$ k( Z3 Q
        0.0053    0.0406    0.8350    0.1184    0.0007

    5 x* Y. V; a" a! m7 G$ l' J0 z* ~obsmat2 =
        0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.03518 J; a# y/ E, D* T4 |: Y+ [/ T1 N
        0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.02280 t( I. A! ^) _# w# f; H+ a* k
        0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.0000
    & ]4 D  C4 m+ @  ^" K7 B: D    0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.0055. Q$ v, ^' i, s7 Q' ], q0 I! \+ e3 b6 S
        0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
    iteration 1, loglik = -277.738670: ], T4 Q4 p+ I0 E( ?
    iteration 2, loglik = -242.163247
    $ d; y" |. ~2 e) a/ riteration 3, loglik = -238.321971
    / _, N: z$ C1 `* d1 ?' x! Z( literation 4, loglik = -233.166746
      {* u/ I) u2 I6 j0 B. Jiteration 5, loglik = -225.682259' p) C5 \; p1 q8 f1 |8 x
    iteration 6, loglik = -214.560296
    % d3 c" @5 G; c, |9 Z# |5 Biteration 7, loglik = -201.182015
    3 R/ Z) B3 W( B: Z- F8 kiteration 8, loglik = -189.427453
    4 X$ Q7 A. V( q9 k  N4 L$ A& M' Riteration 9, loglik = -179.156352' o- Y9 h8 k! P( w2 P- |6 T; x! J8 j
    iteration 10, loglik = -171.744096
    1 E& ~$ W) ~4 _iteration 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
    / B7 c6 n: Y4 q) g6 ]( C2 [
    prior4 =
        0.0000) d$ u2 o/ P& G/ L$ u6 V
        0.9982
    9 `5 h* `" t" H8 c9 l8 x. m% v    0.0004
    # x% j+ O, J! n6 \. a4 s    0.0014
    & |( N  Y/ q: x9 i    0.0000

    ' G& J" O0 S: W. W6 Etransmat4 =
        0.0873    0.5277    0.2799    0.1007    0.0045* S" v3 g- q6 P% G6 Q
        0.0002    0.0000    0.0005    0.0000    0.9994& O( x( t9 [" r8 k9 N
        0.0180    0.0000    0.0118    0.0011    0.9692
    ; q$ w: T3 h6 b8 K    0.0436    0.0226    0.0810    0.0219    0.8310* X9 Q! C* z% _* |. B
        0.9746    0.0056    0.0003    0.0195    0.0000

    , M2 w* x$ j" _. e9 Vobsmat4 =
        0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.0770
    6 C! G/ k8 G9 ?2 t; A% ~8 O. B    0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.00002 y' ]/ X  C7 N
        0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001! M5 V- ?0 |; L" O. C
        0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.08024 R+ K7 T6 b+ k* w: j0 c; m
        0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225
    7 d6 [" S3 T% k' a
    data1 =
         5     2     4     1     2     2     5     2     3     7     1     6     2
    ; o. I3 [# ^0 m, ]
    loglik =
      -19.2351
    - J: l  z+ a' |% b  ?
    loglik2 =
      -21.0715
    9 _9 U. c- x/ j9 \: r) K
    path =
         3     2     5     3     2     1     3     2     1     5     3     2     1
    - [$ ~; N) Q8 w9 M# j
    path2 =
         2     5     1     2     5     1     2     5     1     1     2     5     1

    $ E. U" q; H5 u4 G5 @' Qfuhe =
         1

    % k0 [7 v9 o! ?, I0 L& O0 }7 |0 w/ H7 w6 t. E

    9 Z2 g4 {) p+ C4 X

    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, 2026-4-17 22:44 , Processed in 0.450437 second(s), 55 queries .

    回顶部