QQ登录

只需要一步,快速开始

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

    + U# w2 O% s) A/ t隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱9 s3 E( x% i, f+ m
    % ①定义一个HMM并训练这个HMM。
    - Y' P8 \- U- V" u% ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。( _( o4 i9 H. r+ W$ S
    % 修改:旺齐齐9 h. K6 {3 l" r% C' ?4 A; ?
    % 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。
    5 X1 k/ e5 i5 J6 y%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % O:观察状态数; y5 @* h6 a) S. d: J3 b; M
    O = 7;9 m0 u6 a; w0 H8 \) D
    O2 = 7;
    % }- d6 {7 ^; y5 R5 Z1 f6 M: t% Q:HMM状态数2 _+ A9 J  Y5 {3 Z
    Q = 5;# r5 f8 `7 q3 u
    Q2 = 5;% s) z2 Q7 p5 p$ V% a& X: V
    %训练的数据集,每一行数据就是一组训练的观察值8 [9 t$ J/ j9 ~7 K
    data=[1,2,3,1,2,2,4,2,3,1,2,7,2;3 ]# f3 J0 f) ~
          1,2,3,6,2,2,1,4,3,1,5,3,1;
    7 ~* y$ d- ]" x* N6 {      1,2,3,1,2,5,1,2,4,1,2,3,2;
    % W% s9 \. e$ C# o      1,2,7,1,2,2,1,2,5,1,2,4,1;, ~' ?. x/ G. M! s/ R/ @
          5,2,3,3,5,2,1,2,3,1,2,3,6;
    ! t. Q1 D& F. k& j      1,2,3,1,2,2,1,6,5,1,2,6,4;' V; m" V+ z- b" I6 `* A0 r2 N
          5,2,3,4,4,2,1,2,3,1,2,5,6;4 N1 e  ?" a/ {# d7 o) |, g
          1,2,6,1,2,2,1,2,3,1,4,3,2;6 n. j( g0 ^: j' E- K* q, ]
          1,2,3,4,2,7,1,4,3,1,7,3,3;- {7 @5 L2 o) f2 R( [* a9 _
          5,2,3,5,2,2,1,2,3,1,2,3,4;( V' S: M' ]9 e& Y% `+ P
          5,2,4,1,2,2,5,2,3,7,1,6,2;]
    4 _6 m, A1 h! _
      data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;* `3 g5 b" o( m$ e! F
              1,2,3,6,2,2,1,4,3,1,5,3,1;8 g3 r# D( M+ S
              1,2,3,1,2,5,1,2,4,1,2,3,2;
    3 G7 ]2 a& P. b8 H  R          1,2,7,1,2,2,1,2,5,1,2,4,1;" C$ g8 N$ N0 ]: @
              5,2,3,3,5,2,1,2,3,1,2,3,6;: W" S; F% s" }+ t+ C9 f) s  u0 ]
              1,2,3,1,2,2,1,6,5,1,2,6,4;
    ; ~+ Q$ r$ w; l  {# {0 Y$ W, T          5,2,3,4,4,2,1,2,3,1,2,5,6;
    7 a5 u$ b) V) m          1,2,6,1,2,2,1,2,3,1,4,3,2;
    / M: D! E1 E8 L8 ]          1,2,3,4,2,7,1,4,3,1,7,3,3;/ b8 z( a% b3 W* F8 h# q
              5,2,3,5,2,2,1,2,3,1,2,3,4;
    / b" G- y" r  B, c4 ^8 I; a          4,2,5,1,2,2,6,2,3,7,1,6,4;]
    % initial guess of parameters
    / S9 p$ \. v3 }# ~8 [+ p; v# M% 初始化参数
    & u' ^1 G( R" _prior1 = normalise(rand(Q,1));# W* w+ ^! T: D9 C9 c
    transmat1 = mk_stochastic(rand(Q,Q));8 i9 _) U: @9 `- @
    obsmat1 = mk_stochastic(rand(Q,O));
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ) A1 F: w# I7 r5 q% 添加部分
    0 }4 ~; r- {; P* N* a# M# J    prior3 = normalise(rand(Q2,1));
    + B. V: I4 I* s) _; {$ R6 Y    transmat3 = mk_stochastic(rand(Q2,Q2));
    1 Z! ?$ j* r/ V# D* m    obsmat3 = mk_stochastic(rand(Q2,O2));
    ( M& x" p) L  i: p%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % improve guess of parameters using EM
    & n' b- @& `6 P+ k6 s. _- N% 用data数据集训练参数矩阵形成新的HMM模型& U# {  ~2 i7 @. \( ~
    [LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));
    4 ]& O9 h  A& j/ d0 P3 |5 R0 l% 训练后那行观察值与HMM匹配度
    ( D$ v+ `8 D7 b, Y! lLL6 g3 O0 X, ^4 o& g3 D
    % 训练后的初始概率分布7 t" b, _  }) |$ ~
    prior2# L3 u' D4 w2 y5 p
    % 训练后的状态转移概率矩阵
    7 y) r. z9 R4 L) S; R, R* a' ktransmat2! i! \. m2 F( I; t
    % 观察值概率矩阵( C, Y9 ?0 h$ m: }
    obsmat2
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ! {- h  v/ D6 @' ?- ?. q% 添加部分
      W$ t5 g, c) I: |. w    [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));
    ' G1 |$ }1 T( D9 N8 V5 i    LL29 v; ~- H7 Z" J( R& c$ c
        prior4
    * B6 l+ ^5 J1 D4 Q* B9 ^8 u) G3 [    transmat49 B( L- x% U- D
        obsmat4
    3 p1 K: `' f7 t) O- o6 L%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % use model to compute log likelihood
    ) N! \% P0 U* N* T$ w1 X; O. X% data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]
    4 @/ s" H9 i2 t: O7 Jdata1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]
    , z8 [/ W& l* A9 }5 Floglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)& S' ]  v& j. w% v: V0 p
    % log lik is slightly different than LL(end), since it is computed after the final M step
    % c& O& L( v' Y8 y, F: B% loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
    % path为viterbi算法的结果,即最大概率path
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    " g# ?, w/ T0 |& k% 添加部分7 r. t; k/ T/ ]+ f) v
    loglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)& T) a, z# q9 {0 [% w
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    2 r- q0 Z9 A) n% Q  I* q& X& ]! _
    B = multinomial_prob(data1,obsmat2);
    * [- g' u6 w  `! [+ r% D. Zpath = viterbi_path(prior2, transmat2, B)
    $ ^' Q8 x1 X! N1 _1 y) h7 e1 csave('sa.mat');
    7 z) p! M% P! T- j
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+ o2 k1 D& _! v, Z' ]
    % 添加部分
    1 Q& n& [3 |7 ]    B2 = multinomial_prob(data1,obsmat4);
    + A# a5 W( V; Y) c; ~5 V/ Y    path2 = viterbi_path(prior4, transmat4, B2)
    ) w: M/ d# z% s2 t& J0 C3 I# h    save('sa2.mat');
    8 s: `; D; ~5 N) n. X8 A    if loglik2 > loglik
    7 T* @4 j4 d; H7 ~( i        fuhe = 2
    # U* W! L  V6 m, ^2 \  H7 b1 i    else
    " y5 H/ p, h( U/ C        fuhe = 1; y. G3 c+ W; |% `! `
        end   
    1 ~7 U' h8 n8 o; s! w%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ------
    运行结果
    ------
    data =
         1     2     3     1     2     2     4     2     3     1     2     7     2( |$ L, l' ?. H& N! a7 m  S
         1     2     3     6     2     2     1     4     3     1     5     3     1
    6 r5 E7 B9 e5 C9 y- _: B% W# \     1     2     3     1     2     5     1     2     4     1     2     3     2
    6 w- q+ J6 K- P; u7 {. v. l1 q     1     2     7     1     2     2     1     2     5     1     2     4     1
    8 }, e- I5 M& c+ ?     5     2     3     3     5     2     1     2     3     1     2     3     68 q/ t& q5 [; N
         1     2     3     1     2     2     1     6     5     1     2     6     4, O# A* O6 U" b- ]5 U' K0 N- f8 I5 n
         5     2     3     4     4     2     1     2     3     1     2     5     6
    / x3 `; \3 s* Y: `     1     2     6     1     2     2     1     2     3     1     4     3     2
    # b8 |! v' @8 K4 N$ i/ M( d     1     2     3     4     2     7     1     4     3     1     7     3     3' a/ o2 S! N# x! R9 K: H: _$ k# c
         5     2     3     5     2     2     1     2     3     1     2     3     4" _, N6 `* r  j" L$ G; X
         5     2     4     1     2     2     5     2     3     7     1     6     2
    4 V4 \/ Q4 D6 ?) Q3 z& f" }, o
    data2 =
         1     2     3     1     2     2     4     2     3     1     2     7     2" W2 j4 j, f  C+ O
         1     2     3     6     2     2     1     4     3     1     5     3     1
    0 g7 H$ B% ^" P( S$ U6 A2 p0 w     1     2     3     1     2     5     1     2     4     1     2     3     2
    ; z7 P/ n$ }$ p6 d2 g; b     1     2     7     1     2     2     1     2     5     1     2     4     19 B, z, k) v9 |8 t& c+ {" W
         5     2     3     3     5     2     1     2     3     1     2     3     6
    ' P) K- b5 z, U  a! P     1     2     3     1     2     2     1     6     5     1     2     6     4
    $ G3 n) ~- B. @' `     5     2     3     4     4     2     1     2     3     1     2     5     6# e5 u$ j0 f5 o% T7 z- R. _7 y1 e
         1     2     6     1     2     2     1     2     3     1     4     3     2
    ; q% E: W+ e3 K8 [8 u     1     2     3     4     2     7     1     4     3     1     7     3     3
    0 i" p6 L/ R! A! o- D9 }' F" n     5     2     3     5     2     2     1     2     3     1     2     3     4, z9 w5 W* y& n7 q
         4     2     5     1     2     2     6     2     3     7     1     6     4
    iteration 1, loglik = -327.100465
    ! O# w# q+ ]5 O5 G# k  G$ giteration 2, loglik = -238.259812
    ! q  ~3 w/ F$ h: M- ^iteration 3, loglik = -232.962948
    4 I+ E, A# ~* c% Iiteration 4, loglik = -223.323891
    * O' x* Q  X3 Niteration 5, loglik = -207.630875  P7 ]) v; f% c
    iteration 6, loglik = -191.012697- j& _' T0 E) ^& z0 M, W
    iteration 7, loglik = -178.611546) g, @2 \7 v7 V3 ^# h! d
    iteration 8, loglik = -171.524132" R# h/ Z. X" p7 ~5 r4 u
    iteration 9, loglik = -168.626526
    6 a9 |* Q# \2 s2 d' Giteration 10, loglik = -167.3870573 j3 {" i& A( M* R# a/ x% P
    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
    7 I/ P5 X6 ]+ V, Y$ K
    prior2 =
        0.0000  _" _: M$ S, ~/ b
        0.00007 _5 z, C- R3 Z
        1.0000
    : n/ n: d8 y" a# E: w- q8 F: v1 x    0.0000% E! o+ }6 q$ d" y* N- d8 B
        0.0000
    3 H! L8 H* N( v1 `1 V
    transmat2 =
        0.0138    0.0089    0.7680    0.1060    0.1033) ~. }+ O4 E& y6 l# L
        0.7811    0.0000    0.0199    0.0067    0.1923: ]4 Y% Q6 _2 t5 e: D
        0.0000    0.9936    0.0000    0.0064    0.00005 }+ L+ W. G# t% Z2 ^
        0.1686    0.2604    0.2242    0.3398    0.0070! `; S( h+ l& k: n" v/ X
        0.0053    0.0406    0.8350    0.1184    0.0007

    6 B4 w( ], z4 @" b# F  `* Dobsmat2 =
        0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.03514 p2 M, U& S/ p& S  q4 K* r2 h) n
        0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.0228* i" f) H. |& R: T3 z# i, u0 O' f
        0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.00007 I" P1 Y% I! R
        0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.0055# c- P5 f1 H3 {7 r
        0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
    iteration 1, loglik = -277.738670, @" a8 s( u& ^- u
    iteration 2, loglik = -242.163247
    6 a: F& ^7 C( witeration 3, loglik = -238.321971
    ! r; x9 U1 r, c# witeration 4, loglik = -233.166746
    3 S5 {+ f" B$ X8 \* J5 r, ~iteration 5, loglik = -225.6822592 G: d; T" {$ L1 Y
    iteration 6, loglik = -214.5602961 u6 O/ q1 P4 v6 C" i
    iteration 7, loglik = -201.182015
    " }5 R1 `/ F* t0 q  D6 S* Iiteration 8, loglik = -189.427453! s+ N1 l6 Q0 A! L+ D7 g, n
    iteration 9, loglik = -179.156352% k# {/ x+ T: K6 N8 L2 J0 y% a5 D
    iteration 10, loglik = -171.744096
    6 J- s! W2 ?# L0 ], citeration 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

    . T4 B$ g" _8 ?2 s/ o4 ]; Y0 r8 P7 Aprior4 =
        0.0000# }5 t! Z, S3 X6 W
        0.9982$ C& T, o4 E& G( K6 k8 Y( l
        0.0004/ W4 D) \' Q7 D* L7 M
        0.0014
    + Y* z6 K' A6 |9 K% W: v7 k    0.0000

    + `" X: N2 Z* U  f& Ktransmat4 =
        0.0873    0.5277    0.2799    0.1007    0.0045: p8 J. T6 r( z
        0.0002    0.0000    0.0005    0.0000    0.9994) W5 W+ Q; G$ m  o" I3 |, h- V# J
        0.0180    0.0000    0.0118    0.0011    0.9692
    + m4 u9 U4 p* T/ ?    0.0436    0.0226    0.0810    0.0219    0.83109 w) z  ?4 D* g) m
        0.9746    0.0056    0.0003    0.0195    0.0000
    . s8 I0 o* w  J' }% b) i  U; s' a# G
    obsmat4 =
        0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.0770
    ) j. o' J7 z' o/ j+ C3 F, g    0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.0000+ W, C( T& ^  D# U
        0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001
    ) g# }& u8 `- T! z  W. |' t; x    0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.0802( |! N& s) o; q; x" b9 v( C
        0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225
    0 B/ r2 N" u# W, p( P% i9 I
    data1 =
         5     2     4     1     2     2     5     2     3     7     1     6     2
    ! g) e( j. j  }4 N. q* `* h! T
    loglik =
      -19.2351
    8 [% @( r; l: E& p8 O) S
    loglik2 =
      -21.0715

    ' Z+ R5 c0 j( y+ q) b- n- i' epath =
         3     2     5     3     2     1     3     2     1     5     3     2     1
    + z9 v7 h0 F: X0 @+ P
    path2 =
         2     5     1     2     5     1     2     5     1     1     2     5     1

    4 e1 U0 i' b) }& ~/ y4 T  {! Nfuhe =
         1

    2 _- \7 Y! _2 ?5 z: a( a. T/ Z# F' I8 I3 A2 l$ Y# C2 ?
    : j$ ^7 C, ~; B2 {; [$ O/ t1 h

    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-8 12:33 , Processed in 0.471671 second(s), 54 queries .

    回顶部