QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1541|回复: 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

    $ S. P) C! q. J9 w# Z- T隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱
    ) \# v+ o' ]; ]
    % ①定义一个HMM并训练这个HMM。
    * x- k2 ^2 D. P% I+ ]: v5 }: N% ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。
    9 k4 ]# F/ ?4 q: C3 L: m( l4 O% 修改:旺齐齐
    0 ]: b4 ^  F3 m" _; r% 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。9 K; F- |4 c/ }$ x& `- M" V
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % O:观察状态数
    # n4 G* }+ j; R. OO = 7;+ E9 A5 Q4 d+ y& U; j% G: ^. F0 \% u
    O2 = 7;
    ! T  i4 e4 p- ?+ ~5 c, {3 Q% Q:HMM状态数
    2 l& g& b! I' _  H( R6 |/ a8 T! CQ = 5;
    ' }7 I5 d! a- U7 K9 }! a7 RQ2 = 5;6 E, E/ e" |8 D: l6 B" p; Q
    %训练的数据集,每一行数据就是一组训练的观察值: ~" ]+ e  s' g) F
    data=[1,2,3,1,2,2,4,2,3,1,2,7,2;9 p5 W1 O; z+ P
          1,2,3,6,2,2,1,4,3,1,5,3,1;
      l# W/ i! P! }9 \' e/ m4 B      1,2,3,1,2,5,1,2,4,1,2,3,2;
    " a; l; V, [+ J% T3 n- @1 `      1,2,7,1,2,2,1,2,5,1,2,4,1;
      G) C" r2 A& u      5,2,3,3,5,2,1,2,3,1,2,3,6;
    ) P% h: ^7 H- v1 f5 r. V- a7 l      1,2,3,1,2,2,1,6,5,1,2,6,4;
      B5 v% Q/ R$ C+ E  y1 ^% G& p      5,2,3,4,4,2,1,2,3,1,2,5,6;/ t4 D, }3 T) i
          1,2,6,1,2,2,1,2,3,1,4,3,2;' q. O+ K7 c  a: o% b
          1,2,3,4,2,7,1,4,3,1,7,3,3;0 p" C  t; J2 X# H7 h3 G, q. W" J% e
          5,2,3,5,2,2,1,2,3,1,2,3,4;
    * h! b8 Y$ S7 N  @$ l      5,2,4,1,2,2,5,2,3,7,1,6,2;]
    ' \7 d- J8 s3 K, s$ M" n) U
      data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;3 B$ @7 N$ v2 O, m
              1,2,3,6,2,2,1,4,3,1,5,3,1;1 W& ^0 x, x, k! S
              1,2,3,1,2,5,1,2,4,1,2,3,2;5 S, L" d6 j7 ]0 Y
              1,2,7,1,2,2,1,2,5,1,2,4,1;
    8 r6 @* M) z% D8 p% h          5,2,3,3,5,2,1,2,3,1,2,3,6;# Y/ g* P' q$ j( t6 j( J6 ]2 g
              1,2,3,1,2,2,1,6,5,1,2,6,4;* `% x$ _; y* h, C: e+ Q
              5,2,3,4,4,2,1,2,3,1,2,5,6;
    ) @4 d+ J  N/ L1 b          1,2,6,1,2,2,1,2,3,1,4,3,2;
    , Y! F, {( |$ o( p/ ]2 b) H3 e          1,2,3,4,2,7,1,4,3,1,7,3,3;
    5 y8 c* `( {  U9 P4 L          5,2,3,5,2,2,1,2,3,1,2,3,4;# |  `) o: R& r+ [- b* t
              4,2,5,1,2,2,6,2,3,7,1,6,4;]
    % initial guess of parameters( n# o  v+ m0 b8 N' ~  c
    % 初始化参数8 E" M+ e7 G9 R0 Q# ~
    prior1 = normalise(rand(Q,1));; l. L* O" ~: \9 l  i) o
    transmat1 = mk_stochastic(rand(Q,Q));/ {% W$ Z+ x+ b$ m8 [3 y2 f+ Z* `2 C- @
    obsmat1 = mk_stochastic(rand(Q,O));
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    & y; X. U; t7 h: M5 t# K5 d% 添加部分
    " y+ Q/ o# O3 q    prior3 = normalise(rand(Q2,1));
    6 @8 j$ K0 D( {    transmat3 = mk_stochastic(rand(Q2,Q2));
    ' R  W% l, v  A4 u    obsmat3 = mk_stochastic(rand(Q2,O2));
    - M* t: [  T+ P( A1 u%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % improve guess of parameters using EM) D  n: U+ R' q
    % 用data数据集训练参数矩阵形成新的HMM模型
    - m7 @# n3 l; d! I9 {% p5 I[LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));
    ' \1 M9 W& {7 i. A0 M! R% 训练后那行观察值与HMM匹配度, ^1 w/ P; z$ a* N* W
    LL: l+ }' Y# ?( e4 L
    % 训练后的初始概率分布
    4 \5 T) P# l# O; K/ s4 sprior2  V4 X1 N2 w; ^
    % 训练后的状态转移概率矩阵
    ! e4 T" E. `* J3 y4 t3 ]transmat2
    4 c# T' C; Y+ k8 B; d$ W5 |$ m% 观察值概率矩阵
    ! `" H8 \/ E3 q* x- R: Gobsmat2
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ( _" N, c( O$ x  {5 S8 r) i5 Z% 添加部分$ n3 T: k: J: a. `" F4 U
        [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));
    ' s4 u: M8 r+ \, t$ R& l    LL2) f# Y) f, [" j1 `; `9 L
        prior4
    ( }0 C* ~0 L; e+ G- U) Y    transmat48 u: i8 w/ D! I7 ?+ d# K  V
        obsmat4
    * B$ w4 e& F" L. }+ V: f( e%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % use model to compute log likelihood
    * n7 {% i3 P9 V% R# }. i/ ^' ~6 g% data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]
    2 L) Q6 p4 ]! G# L# p/ `- Udata1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]* q- o6 N0 N' C* L* t
    loglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)
    : ~. ^. s9 d7 O2 C, {3 G% log lik is slightly different than LL(end), since it is computed after the final M step1 S; m1 N& T$ M# s
    % loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
    % path为viterbi算法的结果,即最大概率path
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" u" s( i. e; ^, F
    % 添加部分
    2 }% T2 [8 r& i0 E& ?- a: C5 ^: rloglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)
    6 _8 H, ]/ I% v" X  Y$ R%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

      U0 L; D, v- j# X  ?B = multinomial_prob(data1,obsmat2);; ], H7 M1 N; Z! x
    path = viterbi_path(prior2, transmat2, B)5 Z% w$ t" o: [: P% h9 u7 F* w1 \
    save('sa.mat');
    $ J3 v! i5 ^) s. B
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%6 {: A- ]5 b, d* k; `, ^7 Z6 g# x
    % 添加部分$ l2 ]" e' c# F' a1 M
        B2 = multinomial_prob(data1,obsmat4);3 B' e$ r4 Y5 F$ G# K. X: A
        path2 = viterbi_path(prior4, transmat4, B2)
    / [$ E$ x8 y: I* o! Z    save('sa2.mat');
    ; N; E* v7 n. ?4 N' Z    if loglik2 > loglik , ^. h* q; P7 k% n( w- Z/ \
            fuhe = 2: ^- v/ F# {% {0 E3 k$ C
        else9 K3 v3 ~1 Z" z8 b; M' j
            fuhe = 1( Z7 t9 p* n) |- n7 a+ ?. I
        end    % T/ o/ H% Q& G$ ?3 T/ T8 T
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ------
    运行结果
    ------
    data =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    8 y& Z5 u) u* M. ?     1     2     3     6     2     2     1     4     3     1     5     3     1, r6 u/ p0 |) D( c
         1     2     3     1     2     5     1     2     4     1     2     3     2
    5 x- C* S1 j! w2 S' T     1     2     7     1     2     2     1     2     5     1     2     4     12 B7 a# v8 e3 U, {- l
         5     2     3     3     5     2     1     2     3     1     2     3     65 ?7 ]; [5 @% a+ ^6 [
         1     2     3     1     2     2     1     6     5     1     2     6     4, n4 \1 p: C0 ?1 n! y: K% I
         5     2     3     4     4     2     1     2     3     1     2     5     60 l: ^* d" U6 H' ]- \) y
         1     2     6     1     2     2     1     2     3     1     4     3     23 i$ H+ \! p# k  m. l  U0 X  Q
         1     2     3     4     2     7     1     4     3     1     7     3     3
    4 U' n0 D4 \2 N- Y8 c8 Q     5     2     3     5     2     2     1     2     3     1     2     3     4
    9 x) i  r7 ]5 h& Z- r  D" v4 k     5     2     4     1     2     2     5     2     3     7     1     6     2

    / Z6 y) a, ~" O, rdata2 =
         1     2     3     1     2     2     4     2     3     1     2     7     23 ?" Z6 F9 Z3 y8 C# l
         1     2     3     6     2     2     1     4     3     1     5     3     1" g& s1 G4 N) P7 }
         1     2     3     1     2     5     1     2     4     1     2     3     2
    7 n( J8 o  ^; P0 N+ i     1     2     7     1     2     2     1     2     5     1     2     4     1
    ( M' h+ W- n# r9 ]3 ?     5     2     3     3     5     2     1     2     3     1     2     3     64 o- Z9 c7 T$ B, G/ j5 [
         1     2     3     1     2     2     1     6     5     1     2     6     44 E. r2 n- F( P6 S$ B
         5     2     3     4     4     2     1     2     3     1     2     5     6
    ; g' n1 |4 c" G7 j, i' A  t     1     2     6     1     2     2     1     2     3     1     4     3     2
    * @; l# V! ]9 k# v$ T     1     2     3     4     2     7     1     4     3     1     7     3     3
    # ?  i, x; p6 l; E5 f4 \+ `     5     2     3     5     2     2     1     2     3     1     2     3     4
    ! e' l/ V/ b; I; C9 N     4     2     5     1     2     2     6     2     3     7     1     6     4
    iteration 1, loglik = -327.100465
    ) M+ T7 @( B* i9 ?  `iteration 2, loglik = -238.259812
    % T8 n/ y% {7 G6 Viteration 3, loglik = -232.962948
    3 q1 s) N+ {. J! v8 ^' C, ^1 Niteration 4, loglik = -223.323891
    8 O' Z, y2 s+ |3 }iteration 5, loglik = -207.630875
    8 G" z. c! e* miteration 6, loglik = -191.012697
    3 Z: q' ~2 F5 N& miteration 7, loglik = -178.6115462 n3 U$ @, E! n1 S9 L; t. L9 ]
    iteration 8, loglik = -171.524132
    ! v. h9 e" C/ }/ giteration 9, loglik = -168.626526
    + M- g3 A! x9 O0 }7 W; S& Qiteration 10, loglik = -167.387057
    3 o- F) v1 e$ L7 P+ ?2 Titeration 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 w. t) O, ~" @8 b! D$ |9 B
    prior2 =
        0.00005 S, c! c* A$ t% D& z- k- z
        0.00005 k. }) B" I9 D. q- e9 ]/ D
        1.0000
    , U$ [6 x' H% V1 \    0.0000
    ! Z9 j" |0 D. c9 t    0.0000

    , ^! X% V1 U4 H1 z2 h4 A1 utransmat2 =
        0.0138    0.0089    0.7680    0.1060    0.1033
    * m  j; ~: o# l6 J  _    0.7811    0.0000    0.0199    0.0067    0.1923* t+ _: A1 e+ L) B
        0.0000    0.9936    0.0000    0.0064    0.00008 |) J) C" _+ }. j" f
        0.1686    0.2604    0.2242    0.3398    0.0070
    9 D) t( {0 r+ ?" h  y2 E" c    0.0053    0.0406    0.8350    0.1184    0.0007
    $ t6 A5 T! i/ b; h+ g  X' X
    obsmat2 =
        0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.0351
    9 c+ I. R6 l" w) n9 W    0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.0228
    $ z$ Y% _6 R: O9 n, [    0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.0000
    ' m6 S( t) n+ d& E) I7 X% ?6 H( [    0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.0055: p) J8 e' O% q2 q" v1 y
        0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
    iteration 1, loglik = -277.7386707 c: H1 h6 g4 C5 c6 ?
    iteration 2, loglik = -242.163247: d' l# m8 u. }# p7 u
    iteration 3, loglik = -238.321971
    ! u6 {1 Q$ q6 [# M  A+ L; kiteration 4, loglik = -233.166746
    - Y( t% L) `4 Diteration 5, loglik = -225.6822592 I! j+ W1 p* v) X8 t3 u# i  v- M  F
    iteration 6, loglik = -214.5602968 x# J4 X1 c( w. k/ R8 o& H0 Q+ _5 Y
    iteration 7, loglik = -201.182015% w2 }" a! b: n
    iteration 8, loglik = -189.427453! F( h) e$ L# `0 ]2 n. X# B4 }8 {
    iteration 9, loglik = -179.156352. f" G2 K3 r2 H0 R& ?
    iteration 10, loglik = -171.744096
    # c. t8 z/ L" m& x( @; qiteration 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
    4 R  I4 j; p& v7 v8 H2 O1 y
    prior4 =
        0.0000: d4 w( l9 u& {, [1 I9 g
        0.99820 f' w. r. E9 S) u. w# R7 D
        0.0004
    % }* Q, K4 ?7 q2 ~. x    0.0014
    ) {0 f! m* u! P/ ~5 f9 N4 M9 B3 g    0.0000

    3 U& k1 K  e/ G0 M$ z9 H: j+ qtransmat4 =
        0.0873    0.5277    0.2799    0.1007    0.0045
    8 V! O3 x  Q: l. y4 {0 ^    0.0002    0.0000    0.0005    0.0000    0.9994
    # m/ a! T; t$ G5 Q    0.0180    0.0000    0.0118    0.0011    0.9692
    & q- T5 l% T: I$ H1 ~9 ]( [    0.0436    0.0226    0.0810    0.0219    0.8310
    7 J7 q) ^0 o# K# n( E- g    0.9746    0.0056    0.0003    0.0195    0.0000

    5 P% z) Y1 ^; g, t! Z# n; ]obsmat4 =
        0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.0770
    6 b8 P' Q2 B) N4 Z9 s4 C    0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.0000
    2 f" M" U! P) @4 e7 O' ?1 a5 q    0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001( I' p/ A7 o* r1 |6 ^+ Z6 t/ t# m
        0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.0802
    # x1 w* {# u' b3 a, G$ Q    0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225
    ! X) q: u* @/ N! h9 n
    data1 =
         5     2     4     1     2     2     5     2     3     7     1     6     2
    ! ?; e/ R, j" P" D6 n8 Q
    loglik =
      -19.2351
    : r5 |/ g/ R2 H3 H7 C% D
    loglik2 =
      -21.0715

    6 D! \0 K8 F7 Bpath =
         3     2     5     3     2     1     3     2     1     5     3     2     1

    + _9 G4 b' x8 e* l4 h8 R* ]+ N, W) qpath2 =
         2     5     1     2     5     1     2     5     1     1     2     5     1
    6 B2 U( ]/ h7 Z2 k$ n
    fuhe =
         1
    " k# N: R6 ]) ^9 Y* n7 O! E
    ! Z: O, J2 u, l
    & o0 W! G& m9 Y5 A* E3 y8 i

    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-20 00:16 , Processed in 0.868926 second(s), 55 queries .

    回顶部