QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1751|回复: 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
    ! Q  r# f3 P' g% ~, l& I, W
    隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱
    3 l! S( ^/ x& \- c
    % ①定义一个HMM并训练这个HMM。4 z) p7 z: F0 G8 j: Z
    % ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。
    - r( |& e9 D+ Q% 修改:旺齐齐
    / m9 l- u( w! W' C/ ]1 S% 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。3 v8 d& g) p! K( m+ N4 Z# W
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % O:观察状态数+ S8 y" i& W! H# H
    O = 7;: w$ i8 I" h/ c9 |  l8 Z
    O2 = 7;; a' c8 _! H4 p: O% C# K/ C. @6 c# T
    % Q:HMM状态数
    + s! @9 P- _& tQ = 5;5 x$ Y, A1 Z$ U  H
    Q2 = 5;
    ( d# k3 v( R0 M( K6 l) Q%训练的数据集,每一行数据就是一组训练的观察值5 o! l- F! D, B2 i4 V
    data=[1,2,3,1,2,2,4,2,3,1,2,7,2;5 i' W, d, n" y$ {+ {
          1,2,3,6,2,2,1,4,3,1,5,3,1;+ _% {  d0 \* M/ k0 B
          1,2,3,1,2,5,1,2,4,1,2,3,2;* T6 A  x& g- D2 q* i# V" S
          1,2,7,1,2,2,1,2,5,1,2,4,1;' X. h# \) v: F0 V9 O
          5,2,3,3,5,2,1,2,3,1,2,3,6;
    9 v7 m( @1 K& F' {. U      1,2,3,1,2,2,1,6,5,1,2,6,4;
    " y1 S- F+ j7 m" |      5,2,3,4,4,2,1,2,3,1,2,5,6;
    ( ^8 u- I5 [# _# C) G- h      1,2,6,1,2,2,1,2,3,1,4,3,2;* x- D% F; M+ Z0 W" [, P
          1,2,3,4,2,7,1,4,3,1,7,3,3;
    9 t7 O$ P& T8 V. ~: a      5,2,3,5,2,2,1,2,3,1,2,3,4;
    6 X% \+ j( P. e' O6 l) C' ^$ B      5,2,4,1,2,2,5,2,3,7,1,6,2;]
    4 a+ e. a8 n4 ^
      data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;5 r1 U  ?. R( z) ^8 y- B% ~' J
              1,2,3,6,2,2,1,4,3,1,5,3,1;/ s4 e$ h- ~  l- [  e( E2 u# l2 c
              1,2,3,1,2,5,1,2,4,1,2,3,2;6 \6 t$ H5 V5 Y" T
              1,2,7,1,2,2,1,2,5,1,2,4,1;2 i: I* ~0 z/ s; g# P- i4 I
              5,2,3,3,5,2,1,2,3,1,2,3,6;
    4 ]* ?/ Y8 X. ?5 [5 _  s8 t' L          1,2,3,1,2,2,1,6,5,1,2,6,4;
    5 V& j5 A4 |" Z. ?' u4 p$ F          5,2,3,4,4,2,1,2,3,1,2,5,6;
    ' j9 V1 [% c# s/ ]5 z          1,2,6,1,2,2,1,2,3,1,4,3,2;
    2 t, y, p9 a$ H2 C          1,2,3,4,2,7,1,4,3,1,7,3,3;
    3 C2 d' _, [+ h" h( A          5,2,3,5,2,2,1,2,3,1,2,3,4;2 u: N, E* D' V4 v2 ?, c
              4,2,5,1,2,2,6,2,3,7,1,6,4;]
    % initial guess of parameters, w& e1 F. l4 y$ l8 e
    % 初始化参数0 D% h( Y) x' d$ M
    prior1 = normalise(rand(Q,1));
    3 z. X1 N- F, Z& Y; d+ [1 R1 F4 Stransmat1 = mk_stochastic(rand(Q,Q));
    9 ^0 t1 y% g  O" p" _, Kobsmat1 = mk_stochastic(rand(Q,O));
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    # h' s- f0 O8 \% 添加部分
    8 y1 D4 r  ~: i# y5 g; b& T; t' R    prior3 = normalise(rand(Q2,1));- i/ C: Y) A4 o( y
        transmat3 = mk_stochastic(rand(Q2,Q2));! T# H. o8 T6 g. T6 T
        obsmat3 = mk_stochastic(rand(Q2,O2));
    # r" V: w& p# V0 B' x- [0 l( ~%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % improve guess of parameters using EM
    " `( v! U+ T0 k8 \6 K* ]4 K% 用data数据集训练参数矩阵形成新的HMM模型
    4 \8 D* z& G/ M9 p[LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));) t3 [9 B7 |  a: j. B
    % 训练后那行观察值与HMM匹配度
    ' h" C" x/ s+ B, bLL
    " I+ U$ k- k, Y5 d% 训练后的初始概率分布& i# g3 `- T2 z5 q8 c
    prior2
    + _- C, X; f- |$ S8 |) F( d% U5 P% 训练后的状态转移概率矩阵' _3 ~1 C2 e; [8 K/ `; U7 p
    transmat2
    8 K9 W0 z4 I" i# ^7 c7 _0 [% 观察值概率矩阵$ F% j( q, g4 ?' m) u  y
    obsmat2
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      K0 [% \- ]* b' T# d9 j: l) g% 添加部分
    1 R) ^  q* l) [- V% T+ w* w* u' ]    [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));
    8 e; R: T" g4 {! D4 P    LL2) q! Y5 _7 E3 }9 b
        prior48 M2 A6 |1 x/ E+ Y
        transmat4
    8 D  E, ?% s$ x1 p, s) ~' c: U5 y  k    obsmat4
    2 j$ Q& C2 [! X& g' Q' ~, h3 k( x; V%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % use model to compute log likelihood
    # C1 }; Q4 E2 {( S4 K. I3 E% data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]
    - F: J; P0 w4 I1 r- wdata1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]7 Z6 Z; g- b+ y9 m9 d
    loglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)2 Z" B3 z4 f% F! d7 g; b9 E) F
    % log lik is slightly different than LL(end), since it is computed after the final M step
    $ Q1 L/ Q! V: f+ d! D6 \  }% loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
    % path为viterbi算法的结果,即最大概率path
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%2 ]$ X9 n; C# S, s" |* H0 V
    % 添加部分+ z: ^3 v+ C2 q
    loglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)8 [" A" q! }: D  i! O
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    ! }7 `4 S3 o+ a# ~$ [; t, ~- oB = multinomial_prob(data1,obsmat2);: H5 t5 y4 U9 w
    path = viterbi_path(prior2, transmat2, B)1 C* ], n  C- L  o! u$ i
    save('sa.mat');
    " L9 H0 A7 ?7 h  Y4 x
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%1 q  w" }3 U# P% P+ E
    % 添加部分
    . @4 f- F$ P9 W# N    B2 = multinomial_prob(data1,obsmat4);7 a4 N$ I( r+ O3 K( {3 r" m
        path2 = viterbi_path(prior4, transmat4, B2)
    ; V- v( A, N5 }+ q8 ~    save('sa2.mat');$ ^) ]) a% ~+ g# m- l* N& Y2 I
        if loglik2 > loglik / [8 Q: ~( q0 a/ c0 h: W
            fuhe = 2
    6 t' q/ I4 Y' Z! _# \$ ^    else
    , ^0 D) R4 C6 T; @( X$ p        fuhe = 1
    9 G/ C) ~+ {1 @- N9 I" n  i    end   
    % G. ?1 L0 s  T* S%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ------
    运行结果
    ------
    data =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    , k# r9 q2 _3 u     1     2     3     6     2     2     1     4     3     1     5     3     1# w, Z  |9 k& y* p5 J5 A
         1     2     3     1     2     5     1     2     4     1     2     3     25 T# ]$ `% B7 U" s$ W( r
         1     2     7     1     2     2     1     2     5     1     2     4     1" c# d1 E* T) \4 C$ _/ T" n
         5     2     3     3     5     2     1     2     3     1     2     3     6
    5 P2 Z1 q6 x( k' }( e     1     2     3     1     2     2     1     6     5     1     2     6     4
    $ y0 p- M/ @1 _4 R. z, G- m     5     2     3     4     4     2     1     2     3     1     2     5     6
    * v& M/ B) w  G     1     2     6     1     2     2     1     2     3     1     4     3     2
    " I9 u9 z9 S0 s6 K! A" [     1     2     3     4     2     7     1     4     3     1     7     3     3
    / |0 M4 \  N  S) W( F* D0 h- D8 u     5     2     3     5     2     2     1     2     3     1     2     3     4
    6 L- m4 ?) ~! P6 I6 F0 q     5     2     4     1     2     2     5     2     3     7     1     6     2
    5 H+ Z; `4 S2 U; `) S% A5 v
    data2 =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    / l: a" T7 U6 }( c2 l     1     2     3     6     2     2     1     4     3     1     5     3     1
    , ~8 D, Z  n  Y. P) r     1     2     3     1     2     5     1     2     4     1     2     3     2
    : v5 U1 @' k" ^* l/ l- }: H3 c3 p7 z     1     2     7     1     2     2     1     2     5     1     2     4     1
    * w5 o# q: n8 E0 l* o4 _     5     2     3     3     5     2     1     2     3     1     2     3     6
    % B  p" n( t2 ?8 F     1     2     3     1     2     2     1     6     5     1     2     6     4! |" [4 f, b+ J4 k
         5     2     3     4     4     2     1     2     3     1     2     5     6
    ' [$ ^5 G& M* N+ H     1     2     6     1     2     2     1     2     3     1     4     3     2
    $ u6 S5 ]1 V6 m% t& I$ ^1 U" y( f     1     2     3     4     2     7     1     4     3     1     7     3     31 X( b  p8 A$ P( ~3 c& R, z4 B
         5     2     3     5     2     2     1     2     3     1     2     3     4# P) N9 |/ ~; I6 r4 J' @
         4     2     5     1     2     2     6     2     3     7     1     6     4
    iteration 1, loglik = -327.100465
    9 ]& ]; e+ C/ W7 Z1 Citeration 2, loglik = -238.2598120 V1 w: @# J/ s# `
    iteration 3, loglik = -232.9629485 S# n; K, C8 `6 K4 C
    iteration 4, loglik = -223.323891
    - F+ l+ M3 g# h- `iteration 5, loglik = -207.630875
    - d" s* Q! o; Hiteration 6, loglik = -191.0126976 a% p" F' x* C# g; B8 Z
    iteration 7, loglik = -178.6115467 w. }7 b; A3 o6 m0 Q
    iteration 8, loglik = -171.5241323 g% Z$ A, Z& j) c/ `+ C; V. J- ?' p
    iteration 9, loglik = -168.626526
    4 D" q, q+ \5 }+ D- Piteration 10, loglik = -167.387057
    4 g2 z* i( V; l7 @2 J0 Eiteration 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
    ( `+ o+ n- Y$ l9 O. s
    prior2 =
        0.0000. {  _5 j% E' B4 Y" Z
        0.0000
    ) ^& ~2 Z& D# w& i    1.0000, S( J. k" d' j* ^. D" f, Q1 E/ A
        0.0000& i/ ~' E! I8 @- H+ C& ~
        0.0000

    ) M1 Q4 g' @! d, d$ N2 d/ o6 \transmat2 =
        0.0138    0.0089    0.7680    0.1060    0.1033
    . p# K: p1 d0 x( S    0.7811    0.0000    0.0199    0.0067    0.1923
    1 a) D( M; `& @* I' M$ T  z9 |; C7 X    0.0000    0.9936    0.0000    0.0064    0.0000: N! W( z2 ^9 B4 H: o9 \6 a# |
        0.1686    0.2604    0.2242    0.3398    0.0070" ^) i% d1 n$ Z2 L& u$ v
        0.0053    0.0406    0.8350    0.1184    0.0007
    - L% p! G- n1 j( ^
    obsmat2 =
        0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.0351
    % S7 {! N! ^5 F. N    0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.0228! [$ L; k; Y8 }  `, b% i! N
        0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.0000
    5 H; f; N9 q& Y. f( P( f5 r/ H    0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.0055
    " h$ \7 y6 R0 j' D    0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
    iteration 1, loglik = -277.738670
    ' ]2 ~3 B2 e/ P. c5 O( literation 2, loglik = -242.163247
    . h2 ^& A) o- L9 i$ Q' riteration 3, loglik = -238.3219712 l2 Q2 q% ^! n* @
    iteration 4, loglik = -233.166746* `; D- a! t: K  e
    iteration 5, loglik = -225.682259
    % u) _/ V7 T7 P# qiteration 6, loglik = -214.560296
    - L. J' t+ D: @iteration 7, loglik = -201.1820152 p4 i7 p- y. s* N. v+ B
    iteration 8, loglik = -189.427453$ R  \2 q/ ], }
    iteration 9, loglik = -179.156352
    ) i8 j$ u7 O2 ~7 R% ~9 fiteration 10, loglik = -171.7440968 H) _$ [- O& }. H/ l
    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
    ' D$ G! k" e) @5 q4 W: c
    prior4 =
        0.0000$ m6 x  B* X, x! [
        0.9982( m# A/ j: W( t& u/ ^0 ?
        0.0004
    - P7 ~$ B; d4 b# p9 f" X0 L  j    0.0014) x, ~8 o$ F* o% Z+ ^6 @
        0.0000

    3 d" F7 u- Y* otransmat4 =
        0.0873    0.5277    0.2799    0.1007    0.0045* P9 ^- o! S. t- c  S4 W0 N2 E0 G
        0.0002    0.0000    0.0005    0.0000    0.9994/ I* Z/ Z1 R3 n$ q% u
        0.0180    0.0000    0.0118    0.0011    0.96928 O5 ]/ T  Y9 K' v( K( }3 i
        0.0436    0.0226    0.0810    0.0219    0.8310
    & c1 t$ e8 n) f0 n9 m    0.9746    0.0056    0.0003    0.0195    0.0000

    $ f  v6 O, f, m% h& U) Vobsmat4 =
        0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.0770
    # P: t1 I: o9 U: ~; v4 t& A5 v    0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.0000
    ' @; O/ U. t; A' f    0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001$ V) \. N8 I" [. V& X% E
        0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.08020 E$ c4 r# q2 b, c. h! j7 G4 D4 A9 q
        0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225
      |+ v& `$ @+ [! z$ h2 h+ {
    data1 =
         5     2     4     1     2     2     5     2     3     7     1     6     2
    , ?) w8 l$ t' A# ^2 [
    loglik =
      -19.2351
    2 j- I  T) a% _6 z5 b6 A6 T) L
    loglik2 =
      -21.0715

      ~7 T" e# w$ G/ y4 P3 I! Ipath =
         3     2     5     3     2     1     3     2     1     5     3     2     1

    2 o' ]& E. e( Z; Gpath2 =
         2     5     1     2     5     1     2     5     1     1     2     5     1
    6 D* Z3 Z0 _$ K$ q3 v6 ^' `
    fuhe =
         1

    9 N* a! S7 h$ z% o5 S6 c% H, {" F. L' E* `

    . A1 H+ b0 k$ ^1 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-6-9 20:10 , Processed in 0.670585 second(s), 55 queries .

    回顶部