QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1810|回复: 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
    7 W+ T, k# E1 U( P3 d
    隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱
    8 Q7 K* P* M7 w
    % ①定义一个HMM并训练这个HMM。& p* D, R* [2 Q" G9 G- }: V+ I
    % ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。( U! j( @8 X# K6 _2 L
    % 修改:旺齐齐
    7 v4 I, P4 T; s% 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。
    ! e* b$ B, t% @%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % O:观察状态数
    5 l5 y* U- v6 U4 UO = 7;9 X; F9 _! N. b- K6 N0 n
    O2 = 7;8 P+ \- R$ V4 {$ D5 h
    % Q:HMM状态数
    # i  a5 C; p; P, r* F. Y3 zQ = 5;
    2 ?, ]4 X6 X6 M0 `Q2 = 5;# O, _2 P# ]9 m( C
    %训练的数据集,每一行数据就是一组训练的观察值
    " j9 o  x/ e# c. ]- r; b( mdata=[1,2,3,1,2,2,4,2,3,1,2,7,2;! m. Y' F' d2 A- q
          1,2,3,6,2,2,1,4,3,1,5,3,1;$ Y8 \* v! w( f" W, r
          1,2,3,1,2,5,1,2,4,1,2,3,2;& B4 O9 i: }1 m8 S8 y
          1,2,7,1,2,2,1,2,5,1,2,4,1;' ~1 `* g5 \1 v1 l
          5,2,3,3,5,2,1,2,3,1,2,3,6;
    , p8 g7 R- u/ k1 Z' j" b      1,2,3,1,2,2,1,6,5,1,2,6,4;/ r. w# ?# N8 h8 d  w2 h4 e
          5,2,3,4,4,2,1,2,3,1,2,5,6;
    8 ]8 ^8 p2 I$ q/ q% ^! X- m$ s6 n0 |      1,2,6,1,2,2,1,2,3,1,4,3,2;; x. i' o# R. C0 d
          1,2,3,4,2,7,1,4,3,1,7,3,3;* J0 S; o$ H: @
          5,2,3,5,2,2,1,2,3,1,2,3,4;
    + I/ T: m, ?4 z7 o  o      5,2,4,1,2,2,5,2,3,7,1,6,2;]

    2 ^& J+ M+ N4 }; s$ Y4 M  data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;& t' `6 S1 w  D% ]' x+ g$ S
              1,2,3,6,2,2,1,4,3,1,5,3,1;
    , d# D' D; n6 F          1,2,3,1,2,5,1,2,4,1,2,3,2;
    . B  _4 g' {2 q' z( K          1,2,7,1,2,2,1,2,5,1,2,4,1;4 x# l: r" d1 B5 z
              5,2,3,3,5,2,1,2,3,1,2,3,6;
    + J+ {7 K+ e6 r7 p          1,2,3,1,2,2,1,6,5,1,2,6,4;$ d& x- y' G" ]+ n' b3 B
              5,2,3,4,4,2,1,2,3,1,2,5,6;
    ) j+ I8 {( y* ]; U: m& Q          1,2,6,1,2,2,1,2,3,1,4,3,2;' p2 M* p3 Y- q- y" i, o
              1,2,3,4,2,7,1,4,3,1,7,3,3;) x6 v/ M: I4 p6 r+ W
              5,2,3,5,2,2,1,2,3,1,2,3,4;
    ( a+ }( H  e* D. j& A  `: N  o. x          4,2,5,1,2,2,6,2,3,7,1,6,4;]
    % initial guess of parameters) T' c  p% e2 u* J  m  g
    % 初始化参数
    / h3 R% h2 J8 W1 \( O- P( pprior1 = normalise(rand(Q,1));
    ' P- j  x$ a7 ]% }, a  |transmat1 = mk_stochastic(rand(Q,Q));
    ( r9 m( O  M" hobsmat1 = mk_stochastic(rand(Q,O));
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    2 {  w% W$ y1 U# r9 {5 Y' R% l! j% 添加部分
    0 B( {- N3 H0 {6 i  i: H/ o    prior3 = normalise(rand(Q2,1));9 ~4 s( y& C) V+ u
        transmat3 = mk_stochastic(rand(Q2,Q2));0 Z( [1 F9 ~6 S( C) g6 ^
        obsmat3 = mk_stochastic(rand(Q2,O2));" b' I- c4 F6 k; c; r
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % improve guess of parameters using EM0 |; N6 L4 K3 Y$ M' |
    % 用data数据集训练参数矩阵形成新的HMM模型
    ! n$ o& C5 h$ H! B( o[LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));9 O3 u6 i9 U' h8 N
    % 训练后那行观察值与HMM匹配度  _! A8 w: s: c  o) C- H
    LL
    / c% O  Z3 {8 E! w  W% 训练后的初始概率分布* k" B7 W! ^* w' I9 K" ?) M1 F
    prior26 I+ l% i# c/ i) M$ R6 ~5 i1 f
    % 训练后的状态转移概率矩阵) ~* u' a7 n( C" N& h# k. O
    transmat2
    3 H3 y3 s& l$ k! L% 观察值概率矩阵
    ! w- g5 L2 _# T+ E; ]+ {obsmat2
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%, h( W! h- ~. l( [$ M2 m: r9 T' s
    % 添加部分
    * q% b- ~. o$ y% D9 R8 U    [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));) l7 w- ~) C( K6 N% H. m) C
        LL2- v5 l4 E- |  O: U% ?% k1 v2 ]
        prior4
    1 v8 H6 `4 X) z1 Y5 h4 \# b    transmat46 `% U- w0 A  F- t) F
        obsmat4
    & Q5 i3 Y1 y! u1 V: o% U: Q. D%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % use model to compute log likelihood5 I! v4 T" ~8 y/ m$ ~
    % data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]
    6 N/ _! D" \! }data1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]
    7 A* a8 }( y' e. ploglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)3 }7 \7 h$ l! n0 ~" g9 M- }
    % log lik is slightly different than LL(end), since it is computed after the final M step
    % N4 |4 W* M& z7 ^  x9 f; R" P% loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
    % path为viterbi算法的结果,即最大概率path
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" I4 f+ r7 ]1 d9 D3 G( C/ y
    % 添加部分
    & x# X" m$ H) W1 R+ U3 n8 eloglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)
    ! ?+ f7 F! z0 v, J4 N" t1 B%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    " w. e0 X* z' F3 ?1 A  kB = multinomial_prob(data1,obsmat2);
    8 M% v8 }  _  D4 C. d6 [) [+ xpath = viterbi_path(prior2, transmat2, B)
    0 O/ A( `6 P( M- @  C1 Tsave('sa.mat');

    . B( N# K! M& H" ^; x%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    + i* n! m) K7 e2 k  e& I( {% 添加部分
    3 o" F5 Z* ^! @' J0 G. E" {- B% }    B2 = multinomial_prob(data1,obsmat4);# K4 ]: l) H5 X  U2 J
        path2 = viterbi_path(prior4, transmat4, B2)
    2 b- v: i% C" f% Y* e  @5 q    save('sa2.mat');. `, u. i# |, k( Y2 M
        if loglik2 > loglik 6 W1 o7 R! j. \6 p
            fuhe = 2
    " m2 M, V7 H( m6 {6 i! w    else. }0 S9 A2 O$ A1 `# z# C% I% C
            fuhe = 1
    2 Y& B  E( P* Y+ G# P  ?    end    3 c" y) g* ~* Q  b8 T+ F# o
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ------
    运行结果
    ------
    data =
         1     2     3     1     2     2     4     2     3     1     2     7     29 u7 o$ s! e7 o: x: R7 f
         1     2     3     6     2     2     1     4     3     1     5     3     1  D. }/ x( m% G' ?- R
         1     2     3     1     2     5     1     2     4     1     2     3     2
    : f! O; c; y! f  c. O2 D     1     2     7     1     2     2     1     2     5     1     2     4     1  b& a" @7 r& D9 n1 a  t1 x) @
         5     2     3     3     5     2     1     2     3     1     2     3     6+ Y" m' r, I' D4 Q
         1     2     3     1     2     2     1     6     5     1     2     6     4+ h0 s: W2 M# d0 W$ D3 O
         5     2     3     4     4     2     1     2     3     1     2     5     6
    2 a& Z; ~* @0 {0 x* M0 c' I     1     2     6     1     2     2     1     2     3     1     4     3     2
    % U" E$ E* _7 a8 ]" Q  t     1     2     3     4     2     7     1     4     3     1     7     3     3
    9 M" s6 j7 W" G1 r- r: B     5     2     3     5     2     2     1     2     3     1     2     3     4, R: I: `; {3 F4 P7 R" X# a' ~) N
         5     2     4     1     2     2     5     2     3     7     1     6     2

    9 |& n) @7 _3 A6 W2 p$ o+ kdata2 =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    ' w+ M2 T5 o) q3 O0 e% ^     1     2     3     6     2     2     1     4     3     1     5     3     1' M" \4 k) x2 L! |2 Y4 q
         1     2     3     1     2     5     1     2     4     1     2     3     2
    ' Z( G2 A( y* e% ?8 W1 t8 }$ K: B     1     2     7     1     2     2     1     2     5     1     2     4     1
    $ {; f! r$ E9 [9 H5 o: C4 A) a% g     5     2     3     3     5     2     1     2     3     1     2     3     6+ G) ^1 {" e3 m' w3 q
         1     2     3     1     2     2     1     6     5     1     2     6     4
    5 A1 m4 \/ r4 ?+ J% j     5     2     3     4     4     2     1     2     3     1     2     5     6, ?# D* R. \4 A- C- W5 I
         1     2     6     1     2     2     1     2     3     1     4     3     29 H* ?( Q) {* Z  t  U4 [; b5 R# m$ ]* u
         1     2     3     4     2     7     1     4     3     1     7     3     3, P7 `# U) t2 M
         5     2     3     5     2     2     1     2     3     1     2     3     4
    % D1 S7 Z; C; ?4 b5 d7 s& G' Q     4     2     5     1     2     2     6     2     3     7     1     6     4
    iteration 1, loglik = -327.100465
    ! H' p1 r) q7 d2 P0 S: [. F# D# d/ _3 ?3 ]' [iteration 2, loglik = -238.259812
      ]" j! k; n# g$ K9 ^8 fiteration 3, loglik = -232.962948) `) Q5 s, a$ s! G& |  j
    iteration 4, loglik = -223.323891
      R2 m) o# V7 O, S' C8 `, ]iteration 5, loglik = -207.6308754 O9 M- m' q1 i, K* z* F8 G
    iteration 6, loglik = -191.012697* w9 b) h' Q/ h$ V1 G/ P
    iteration 7, loglik = -178.611546: P8 w. T% t, V+ P
    iteration 8, loglik = -171.524132
    - T. `/ d, h4 {iteration 9, loglik = -168.626526, I0 B& Y% E, L& B% ^3 @+ A0 B) I
    iteration 10, loglik = -167.387057" u& s5 u0 [8 g' `
    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
    3 m5 {  d! t  D! k& p) A
    prior2 =
        0.0000
    " N& R- b  w; h3 d, s  A    0.0000
    % C* _: D0 E5 U, t8 v/ m% a5 v    1.0000
    " o6 L. O+ b) E* X# T) b    0.0000
    " q1 \# r, N" K7 R    0.0000

    5 ?1 I8 M" Q) h) Ctransmat2 =
        0.0138    0.0089    0.7680    0.1060    0.1033' Z# H. w; D9 c$ b! f- z. `) ]& S
        0.7811    0.0000    0.0199    0.0067    0.1923+ e( r$ m/ B. N
        0.0000    0.9936    0.0000    0.0064    0.0000& d' @2 W  }' x# V3 }
        0.1686    0.2604    0.2242    0.3398    0.00708 k1 u- A9 W/ b+ O1 D8 @
        0.0053    0.0406    0.8350    0.1184    0.0007

    + Q/ U- C' U4 J" aobsmat2 =
        0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.0351' J, Z) S! L# N* g, w
        0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.0228
      {1 z) M; C. L/ ^- V2 C& g3 @    0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.0000, V6 Z( r0 g3 V4 G) z
        0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.00558 ]# X4 a, x/ \9 m  a
        0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
    iteration 1, loglik = -277.738670
      w3 o% z8 h7 E' Y; ?7 qiteration 2, loglik = -242.163247
    $ D$ I% [  c) K+ d4 j3 ~iteration 3, loglik = -238.321971
    5 J! ^) O. L' i6 x" [iteration 4, loglik = -233.166746
    * S4 K. B& u4 W( m) kiteration 5, loglik = -225.682259" P' v7 e! G6 `. f1 C; R$ z- A& D6 V
    iteration 6, loglik = -214.560296
    ' k, ^  z* l& B1 ^iteration 7, loglik = -201.1820153 Z) c# S4 V4 W4 u2 |* B$ D# k
    iteration 8, loglik = -189.427453
    ) \0 C6 a, R( b' U& ~, n- Iiteration 9, loglik = -179.156352
    5 i( M& \& t! L, Q; [; r: j' fiteration 10, loglik = -171.744096
    . z  R: p4 F$ `% L% W' b. y7 U: _1 niteration 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

    ' n7 y( {; N. d2 i6 E- D+ P! Y( n# E" Aprior4 =
        0.0000; j9 f& R- r5 N- k
        0.9982
    ; j+ @. P. R. h    0.0004
    7 U0 s) b) h1 Z; ~+ {# Q: q    0.0014) z/ s. Q$ Q$ v8 q1 _3 @+ K; }
        0.0000

    . B' [! W9 i0 u- s& {- g0 m4 H/ }transmat4 =
        0.0873    0.5277    0.2799    0.1007    0.0045
    2 d, `8 P) \$ h- k    0.0002    0.0000    0.0005    0.0000    0.99944 p. b2 k! y! Q) p2 e) h: r6 N
        0.0180    0.0000    0.0118    0.0011    0.9692# N0 r. D0 e3 Q6 B( Y& @/ v
        0.0436    0.0226    0.0810    0.0219    0.8310
    6 c. J9 l( \9 N) v1 e, a    0.9746    0.0056    0.0003    0.0195    0.0000

    , X# n# K6 D$ ]4 G! G3 _obsmat4 =
        0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.0770
    ' V( v3 T7 c) C. a* b/ l* R, s% Q    0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.0000
    1 r9 n# I% R  V( N9 ]3 K    0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001
    3 `- x- l1 }8 {4 |1 e$ q! A& N    0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.0802
    : v6 I% S1 v: y+ a# X" \    0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225
    * {" z2 r( \: U
    data1 =
         5     2     4     1     2     2     5     2     3     7     1     6     2

    $ p& b+ {# b% nloglik =
      -19.2351
    . }: @, ], [/ i; G
    loglik2 =
      -21.0715

    / x. s/ ?. {: Ipath =
         3     2     5     3     2     1     3     2     1     5     3     2     1
    4 Q, L3 {, s6 t, k+ Z9 T; w3 n
    path2 =
         2     5     1     2     5     1     2     5     1     1     2     5     1
    + g+ _" B* n) l
    fuhe =
         1
    0 H% O. V/ g2 Y. X
    9 |" S0 }) {; o- Z( b+ I3 u

    9 R1 z9 Q/ {# M* E, Y0 y

    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-9-10 23:06 , Processed in 0.334942 second(s), 56 queries .

    回顶部