QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1780|回复: 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
      `/ e6 w4 A! X& g- ~
    隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱# ~3 _; m( G+ F
    % ①定义一个HMM并训练这个HMM。
    ' i) h) j  f3 ]* K$ ]% ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。
    1 Q' `- R1 y3 e4 j% 修改:旺齐齐
    ; o4 j4 ~2 o6 A2 l- @: _' x! J% 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。
    3 @" ]. X+ k) N* ^' f% e%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % O:观察状态数! J# Z) Q2 O# w/ S4 S! [$ `
    O = 7;
    . A; d- O! Z# BO2 = 7;0 y5 e+ j- ?( U+ i( {3 |, L1 T
    % Q:HMM状态数
    ) P' o* r4 U, i! q4 `- g, ^" ~Q = 5;% W. u8 i9 w" s4 J  Q) \3 d- m' I
    Q2 = 5;
    3 n1 a) ?0 U. ?" i9 @# J. z%训练的数据集,每一行数据就是一组训练的观察值+ j* a1 c, Y1 l1 P
    data=[1,2,3,1,2,2,4,2,3,1,2,7,2;
    % p& A8 f  u- ]" x+ c  ^+ Z      1,2,3,6,2,2,1,4,3,1,5,3,1;$ A6 N6 O  x& h6 {( C
          1,2,3,1,2,5,1,2,4,1,2,3,2;& e! B& U& L2 ^" D0 ?
          1,2,7,1,2,2,1,2,5,1,2,4,1;
    " H1 g' l2 b7 }  `7 q1 A      5,2,3,3,5,2,1,2,3,1,2,3,6;
    ' j% b/ ], B0 G  }' Y) ^" F7 p      1,2,3,1,2,2,1,6,5,1,2,6,4;
    # ~* W9 T5 l; o# k; T4 r      5,2,3,4,4,2,1,2,3,1,2,5,6;4 T+ B& U3 ]* A7 B( b4 h. d
          1,2,6,1,2,2,1,2,3,1,4,3,2;- r3 ^# ]( c* J' _' B5 n0 C
          1,2,3,4,2,7,1,4,3,1,7,3,3;
    ( d; ~: c" h2 |4 g      5,2,3,5,2,2,1,2,3,1,2,3,4;# W1 d  Q) ~$ \- \3 t3 \' t
          5,2,4,1,2,2,5,2,3,7,1,6,2;]

    : G- E5 j5 `' A. i! H% C  data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;. J, o9 ?' c1 J7 M" z# z
              1,2,3,6,2,2,1,4,3,1,5,3,1;; @6 Z* p- a7 V
              1,2,3,1,2,5,1,2,4,1,2,3,2;
    2 O+ J1 n& [0 i5 l- N: Q# y1 w          1,2,7,1,2,2,1,2,5,1,2,4,1;* O4 ~: a9 |0 B0 v( g; r! _3 h0 l
              5,2,3,3,5,2,1,2,3,1,2,3,6;8 Z, G; _6 F, i
              1,2,3,1,2,2,1,6,5,1,2,6,4;# w8 R" G' r7 ~' G9 `% r
              5,2,3,4,4,2,1,2,3,1,2,5,6;( A& V+ a" @/ a% Z; R' x) ]8 c- F- ~
              1,2,6,1,2,2,1,2,3,1,4,3,2;' ^& X& G8 J( ~* M
              1,2,3,4,2,7,1,4,3,1,7,3,3;+ ?- u" @$ c; \
              5,2,3,5,2,2,1,2,3,1,2,3,4;
    9 X) n. s. J9 B8 Y4 ^1 V          4,2,5,1,2,2,6,2,3,7,1,6,4;]
    % initial guess of parameters* p! X/ Z2 @& I, ~
    % 初始化参数! o$ P# Z9 O& S/ Y4 v
    prior1 = normalise(rand(Q,1));9 q( [/ q- y( z5 A  K
    transmat1 = mk_stochastic(rand(Q,Q));2 p! }, Q; [. h
    obsmat1 = mk_stochastic(rand(Q,O));
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%, S% O$ C% x8 |! @7 z# `
    % 添加部分
    7 u7 z& N( p: b! r    prior3 = normalise(rand(Q2,1));- V- e, p; X" T" S
        transmat3 = mk_stochastic(rand(Q2,Q2));
    8 M$ N- k& S0 Y1 t. @! [7 }7 D    obsmat3 = mk_stochastic(rand(Q2,O2));
    ' t7 R. v& F8 P%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % improve guess of parameters using EM5 m' A$ B1 h- L3 c" {! y* r8 o" d0 z
    % 用data数据集训练参数矩阵形成新的HMM模型/ y, Z& e: f* @9 O' A% N
    [LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));
    9 B6 r' l' J: K  L6 u! D# w  n. U% 训练后那行观察值与HMM匹配度* X" z6 s- A% S
    LL
    6 g- [& o  [3 C4 U% 训练后的初始概率分布3 x5 x; e( {$ Z  T
    prior23 T3 T9 d4 S! W1 R2 a! d$ X
    % 训练后的状态转移概率矩阵
    ( L, |8 [8 M0 }9 {4 ytransmat2
    ' I) V* [  h8 v" N' Q4 P& ]% 观察值概率矩阵0 I1 |/ o7 O) l0 X1 Z9 B/ r
    obsmat2
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ' m1 Q( P* r, H( g; T% 添加部分
    % |* R# S9 j3 r    [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));
    ) n+ L; A0 n( F! o# q! W    LL2
      F( N2 N: o: v: Q) l4 d    prior4
    5 j! T7 x4 u2 P! z    transmat4- J% r( V  S2 d  d
        obsmat4
    ; |: K. M/ U, I7 c/ }* D%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % use model to compute log likelihood
    + G2 t! U- \& T% data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]
    + @) V- }3 c: zdata1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]# y4 ^+ @% ~1 k! ?
    loglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)9 t7 l1 _1 s4 W
    % log lik is slightly different than LL(end), since it is computed after the final M step
    / F! r) c6 V* Q' A& [% loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
    % path为viterbi算法的结果,即最大概率path
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      G* G& d4 ?1 U" N  w. V% 添加部分1 q! \: [7 ^9 G5 N- x3 J! N
    loglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)
    ! m: y% B+ b: `  b" i: L%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % q' U/ c( N: o: c9 _
    B = multinomial_prob(data1,obsmat2);
    8 Z  A0 w: s  l1 i2 v- Ypath = viterbi_path(prior2, transmat2, B)' j; g0 s* y9 a( n9 ?0 u3 a
    save('sa.mat');

    6 T+ F9 y+ P& N( u: r%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    : |9 y  A4 a" j7 p( }8 J$ {! u% 添加部分) n7 F3 R; b% f$ [" g9 \/ {+ S
        B2 = multinomial_prob(data1,obsmat4);
    $ n9 S( P) [% \* ?$ v4 Z2 C, A    path2 = viterbi_path(prior4, transmat4, B2)4 y2 i% f# d( b, N9 {3 m
        save('sa2.mat');0 J# W" y; p$ |5 J' x6 l2 Y
        if loglik2 > loglik . y/ `& u5 |# S- W) U9 v" W+ I. X
            fuhe = 25 E$ ^, ?6 P3 y: @9 ]" {
        else* L4 \- v9 U* x7 \* [
            fuhe = 13 P% x& }* G! h) ]# M8 }( P
        end    , a0 n; |2 l, \+ m
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ------
    运行结果
    ------
    data =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    ; f4 u$ o2 U" V0 J8 v, k     1     2     3     6     2     2     1     4     3     1     5     3     1! G) i" ?" O% e
         1     2     3     1     2     5     1     2     4     1     2     3     2
    $ B1 \$ Z7 W* B/ A( s     1     2     7     1     2     2     1     2     5     1     2     4     1
      E7 }+ R$ d6 n% u$ i0 I, @1 _     5     2     3     3     5     2     1     2     3     1     2     3     6; d9 g! \. S- S! k0 E
         1     2     3     1     2     2     1     6     5     1     2     6     4
    ( R$ a9 c  G0 Z+ r: r     5     2     3     4     4     2     1     2     3     1     2     5     6
      ]  ?. W) U, ?     1     2     6     1     2     2     1     2     3     1     4     3     2
    9 n: E7 H4 t2 x$ I7 O& j4 |     1     2     3     4     2     7     1     4     3     1     7     3     3
    # @0 l: U. C& t# m1 X* _     5     2     3     5     2     2     1     2     3     1     2     3     4
    & I( Z' W& z* _     5     2     4     1     2     2     5     2     3     7     1     6     2
    * q1 S3 [; ]9 m4 a
    data2 =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    0 s  E$ m. g% U' _9 O$ T7 M     1     2     3     6     2     2     1     4     3     1     5     3     1
    + X+ D2 N. I) @9 N5 H4 u5 x     1     2     3     1     2     5     1     2     4     1     2     3     2
    & A; F+ {8 h3 c2 _5 U     1     2     7     1     2     2     1     2     5     1     2     4     1
    ; l7 T7 g6 n& J8 D9 F- E2 b     5     2     3     3     5     2     1     2     3     1     2     3     61 t$ v1 m; X0 j. Z$ p% ?1 _3 I
         1     2     3     1     2     2     1     6     5     1     2     6     4' A  k5 z5 g$ f, `; M% E) f
         5     2     3     4     4     2     1     2     3     1     2     5     6
    3 M5 m3 ]) ?0 b' t0 q     1     2     6     1     2     2     1     2     3     1     4     3     2
    3 d; j9 H& \8 t& G     1     2     3     4     2     7     1     4     3     1     7     3     3
    & E" [7 V9 E6 N! v/ U4 w     5     2     3     5     2     2     1     2     3     1     2     3     4
    6 Z: V- i7 `" f3 W$ d6 k# b     4     2     5     1     2     2     6     2     3     7     1     6     4
    iteration 1, loglik = -327.100465* b4 `3 \) {( X5 g9 \
    iteration 2, loglik = -238.259812
    ! O7 ]  ]5 {" d9 v5 a2 p( ?iteration 3, loglik = -232.962948
    ; q+ s+ g1 _3 z5 n6 E5 b! Q8 x7 Riteration 4, loglik = -223.323891
    9 U) ~+ @$ H! T/ w2 z. miteration 5, loglik = -207.630875
    0 C5 C0 s' f6 e- \* [5 ?- H, _iteration 6, loglik = -191.012697" m3 I0 Q! o. ~: T
    iteration 7, loglik = -178.611546
    - ^) k6 b7 D+ n& miteration 8, loglik = -171.524132" ^( r# Y' ~1 f
    iteration 9, loglik = -168.626526
    2 ], F5 b+ E; _  I! ziteration 10, loglik = -167.3870570 n1 C& {8 h8 D4 `+ V
    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
    / o3 T* Z3 {  t1 g
    prior2 =
        0.0000# O- L2 M. s; w# N* t  r
        0.0000) R. t3 j1 c  P( c3 c8 N$ w
        1.0000
    : e# B: R% ~) V/ l$ X; H- o$ d    0.0000
    # U* _7 d: z6 ~# P    0.0000
    4 S) l5 V( l+ X) S6 ^! J% `" ~
    transmat2 =
        0.0138    0.0089    0.7680    0.1060    0.1033
    3 _$ ?' V2 U) k/ P  a3 `. j    0.7811    0.0000    0.0199    0.0067    0.1923
    ( L9 a/ y4 c1 ~+ ^2 r; }    0.0000    0.9936    0.0000    0.0064    0.0000
    ' k' g& j3 @- n; F    0.1686    0.2604    0.2242    0.3398    0.00705 b! Y+ P% s2 B$ C: Z9 ]" T! c  |
        0.0053    0.0406    0.8350    0.1184    0.0007
    ( |& E/ I$ T0 w& J% A; G
    obsmat2 =
        0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.0351
    + v+ ^: E' V# m9 g- R. j4 E& Q  T    0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.0228
    . o0 l  I: n1 B6 U; r+ Q. m+ q    0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.0000
    4 F" ?$ r6 f& H    0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.00555 c8 }3 }, v9 \3 {2 h3 a$ }
        0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
    iteration 1, loglik = -277.738670
    & D" o% k4 M6 R8 Q/ Q5 G  Qiteration 2, loglik = -242.163247
    8 S7 j/ O8 ^: n( `& siteration 3, loglik = -238.3219714 Y" Q* N+ U0 w. w& l
    iteration 4, loglik = -233.166746
    / |. Q% J6 a3 y# [iteration 5, loglik = -225.682259( |, X5 {2 q; e: S; T
    iteration 6, loglik = -214.560296; b( g. l2 w, U5 A/ D
    iteration 7, loglik = -201.1820152 r; X+ I) H; P0 f
    iteration 8, loglik = -189.427453
      x& ^. K. h% q8 `1 Siteration 9, loglik = -179.1563523 \2 W" h+ s0 ?
    iteration 10, loglik = -171.744096, J  i: ^! N* z0 o( a
    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
    * Q6 G2 o9 T8 V  O
    prior4 =
        0.00009 K( D6 g, M6 n9 g" o8 {
        0.9982! s# [) z7 ^* z& a$ X
        0.00048 W7 }/ @% V7 O! [
        0.0014
    - c9 u! g4 i7 {- s  C: ?; ]    0.0000

    / d$ s2 V( V; R! Qtransmat4 =
        0.0873    0.5277    0.2799    0.1007    0.00454 ~, d9 A+ z# G7 u
        0.0002    0.0000    0.0005    0.0000    0.9994) U- J. I6 B8 w, Y! P
        0.0180    0.0000    0.0118    0.0011    0.9692
    , a: W( q' `' E6 U    0.0436    0.0226    0.0810    0.0219    0.8310
    8 V9 U; H8 f% Q: F    0.9746    0.0056    0.0003    0.0195    0.0000
    4 c" ~) W5 O) W5 ^, A
    obsmat4 =
        0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.0770
    ( a9 T' b: z; q' U1 e    0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.0000
    ( h4 `6 s" F2 A4 z    0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001
    6 a2 K" \8 x1 F6 n    0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.0802, j( X% J" ^1 N
        0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225
    5 u9 X4 V2 u  v; c+ A2 t
    data1 =
         5     2     4     1     2     2     5     2     3     7     1     6     2

    - _  N9 L! c1 V. ]3 \5 v( H, ?loglik =
      -19.2351

    . j8 U4 ~& t/ E* f' Z) j" o7 ]loglik2 =
      -21.0715
    5 t& S5 v* t: I2 z# `
    path =
         3     2     5     3     2     1     3     2     1     5     3     2     1

    6 q+ q" ?4 ^* s" Hpath2 =
         2     5     1     2     5     1     2     5     1     1     2     5     1

    ' @9 n- z+ v6 \7 Afuhe =
         1

    1 S- Y  Q2 x, J% t  W- P
    # r  w  r5 D) U" {. L, E
    & t& A  A5 I# k+ D; C

    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-7-25 15:02 , Processed in 0.473222 second(s), 55 queries .

    回顶部