QQ登录

只需要一步,快速开始

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

    + E+ x5 M% x  k9 {' p$ s隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱' T( x  @) b5 Y6 J
    % ①定义一个HMM并训练这个HMM。$ O& Z% @$ `, Y  B# Q
    % ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。
    ; e# z7 N) g% w! }: m% 修改:旺齐齐2 j( z" j: g2 S3 Y* h9 A6 h3 h, T
    % 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。
    ' K+ n9 r! y0 |- T7 K%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % O:观察状态数# x$ s* i+ W, S/ u0 U; T: L* Y
    O = 7;
    : X2 p2 d" C3 G  R  CO2 = 7;
    4 C! p2 P" Y2 d! t, x: k! ?+ L. h% Q:HMM状态数( ~, m9 T1 g, j& s+ M
    Q = 5;0 N) S" v! Z* |- a
    Q2 = 5;2 a7 m2 A% A# j2 x
    %训练的数据集,每一行数据就是一组训练的观察值
    , ^3 {: {5 T9 i7 R2 P; v: x) Qdata=[1,2,3,1,2,2,4,2,3,1,2,7,2;
    # t# D! ]! R% Y, p! h: v      1,2,3,6,2,2,1,4,3,1,5,3,1;4 ]" |) j* G( m3 n$ F! `8 W
          1,2,3,1,2,5,1,2,4,1,2,3,2;
    $ }/ I) Z4 `6 q' A* K3 G      1,2,7,1,2,2,1,2,5,1,2,4,1;
    . J( Q1 }; f; ?( R0 |4 ~1 s      5,2,3,3,5,2,1,2,3,1,2,3,6;% ~" C! b3 ~* _( \% B2 g
          1,2,3,1,2,2,1,6,5,1,2,6,4;. W; a3 U/ P; [- h1 l
          5,2,3,4,4,2,1,2,3,1,2,5,6;6 a; z) \0 ?  N& S; E. o, t1 |  z
          1,2,6,1,2,2,1,2,3,1,4,3,2;  u: B+ ]; k- K" Q0 O8 Q
          1,2,3,4,2,7,1,4,3,1,7,3,3;" x4 ]5 {$ p' ^3 [/ s6 u& V% K
          5,2,3,5,2,2,1,2,3,1,2,3,4;+ k4 o" L( c2 n4 ]4 y" `
          5,2,4,1,2,2,5,2,3,7,1,6,2;]

    3 ]+ K9 \. f8 x" ^' B9 {- J  data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;# ~8 w" k& l8 v3 x- \* P
              1,2,3,6,2,2,1,4,3,1,5,3,1;
    % `$ V! ?4 `1 ?5 B8 U( ?6 Z          1,2,3,1,2,5,1,2,4,1,2,3,2;
    # V) N$ l( x2 H          1,2,7,1,2,2,1,2,5,1,2,4,1;
    ( n( o. W% G' }8 V/ [          5,2,3,3,5,2,1,2,3,1,2,3,6;
    3 U8 U2 \3 f. c: r% o          1,2,3,1,2,2,1,6,5,1,2,6,4;
    ) W- S9 M, \; _, J- q+ H- P          5,2,3,4,4,2,1,2,3,1,2,5,6;4 ~1 s1 |. Y4 G/ ]7 b* ?
              1,2,6,1,2,2,1,2,3,1,4,3,2;
    " m6 v* m# o" z' D- K          1,2,3,4,2,7,1,4,3,1,7,3,3;
    ! s' ]( M! a) l- w: y! g          5,2,3,5,2,2,1,2,3,1,2,3,4;
    ; z- j2 ]1 D  L" A6 q& n          4,2,5,1,2,2,6,2,3,7,1,6,4;]
    % initial guess of parameters
      ~9 W$ e+ ]$ `2 b# D% 初始化参数
    ; P2 I- p$ ?( j0 i% q! aprior1 = normalise(rand(Q,1));; Z& I' M* M" w; Q7 P% t, v
    transmat1 = mk_stochastic(rand(Q,Q));2 L3 T0 a- V/ Q: @: k/ S' V
    obsmat1 = mk_stochastic(rand(Q,O));
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    : t# |$ T0 Y* N% y4 \7 ?% 添加部分  b! |# ?" u0 [, O! v9 q+ f; Q; L
        prior3 = normalise(rand(Q2,1));2 t+ F- m* O: o7 f( u+ z
        transmat3 = mk_stochastic(rand(Q2,Q2));/ o, d# f; J& [7 ^
        obsmat3 = mk_stochastic(rand(Q2,O2));2 u5 z- T8 D1 x( t9 f+ I. M7 h8 ?0 r
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % improve guess of parameters using EM$ J+ n& C: r. n% G, {2 i( h
    % 用data数据集训练参数矩阵形成新的HMM模型. O/ E$ t7 V/ e7 t# a) u
    [LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));  C3 U" f9 ^6 o2 O1 z
    % 训练后那行观察值与HMM匹配度
    9 q0 i8 `! R" Y: M4 z! m& HLL/ Y0 X6 W# {4 v+ d$ Z5 I- n* f
    % 训练后的初始概率分布
    . f& l9 s: L7 {- Q4 b9 mprior2
    9 p+ X" Z9 W+ E0 `% c, S$ V! m* ]! r9 t% 训练后的状态转移概率矩阵9 z. M8 Y$ G! a, k
    transmat2
    , z1 ?' V* f3 J6 B6 O. t8 t. e% 观察值概率矩阵
    9 k- H. ^3 ~  |  U8 R& Y; {obsmat2
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    " B; i! U0 B! g. s+ Q  x- `3 n, b0 b% 添加部分
    1 F  h# `: G; O( B$ T    [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));3 ?+ `6 a$ ~  p; v$ X
        LL2
    1 S1 D( \5 M. N# f8 p4 k7 X3 t    prior4
    9 F2 k" l% E  r- s) C( O) A    transmat4
    2 A1 L$ z6 Y1 v+ I* D    obsmat4( r$ H$ C9 Q8 ^* H: L6 e
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % use model to compute log likelihood
    , N  v3 Z5 c' V2 H% data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]
    ' Y3 B! I4 ~0 s7 Ndata1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]
    + ^* h9 P$ }1 ?/ O6 Sloglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)) S% W. p) b) S, x
    % log lik is slightly different than LL(end), since it is computed after the final M step6 o- T+ ?9 A1 E0 h. F( V$ u. E" m/ Z
    % loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
    % path为viterbi算法的结果,即最大概率path
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%' [3 H) n8 S* Z4 `- W
    % 添加部分
    . [+ u) C- R/ v8 {: Tloglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)
    & _$ S7 x; r. w' S9 j%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    . r2 P/ N  `+ Z& U/ Y/ LB = multinomial_prob(data1,obsmat2);0 w8 L5 P4 b, ^& w
    path = viterbi_path(prior2, transmat2, B)8 O6 L4 ^" k! [9 I  Y
    save('sa.mat');
    6 P! V( W) K2 {0 @3 T
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%8 E7 W% D) O9 M6 K4 ^  s  `( q7 p7 T
    % 添加部分
    ; l  M7 K5 d. x: x    B2 = multinomial_prob(data1,obsmat4);1 U) W3 u( b7 }6 n- x3 x
        path2 = viterbi_path(prior4, transmat4, B2)
    5 `8 ~, c, O. I    save('sa2.mat');
    % g  q$ c& B8 m3 t4 [    if loglik2 > loglik ! @5 ?- L! M+ b- `6 e4 Z4 ?
            fuhe = 2) E: Z# @" S) L% K9 p: |/ f) P
        else
    & X  N. `4 Z% o6 [        fuhe = 1
    8 w  K0 k* ]9 I* M5 C    end   
    & r( g: Y) V- }# i8 x# f$ v3 i$ M%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ------
    运行结果
    ------
    data =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    ; ?" O5 j$ N8 L5 y% d1 S' _4 e     1     2     3     6     2     2     1     4     3     1     5     3     1
    0 u! x& K# \# r3 O/ _# K5 _+ M  `' L- d     1     2     3     1     2     5     1     2     4     1     2     3     2$ s& `- E0 H" y( J9 J; l; @: \5 C4 U' Y
         1     2     7     1     2     2     1     2     5     1     2     4     1* L5 n/ \& l  f7 a! X6 Y  X) ^
         5     2     3     3     5     2     1     2     3     1     2     3     6
    - ?  u: |. h6 L  k     1     2     3     1     2     2     1     6     5     1     2     6     4
    7 @) z) A; G3 i- h! c     5     2     3     4     4     2     1     2     3     1     2     5     6# b# a% }4 C/ t0 g+ }
         1     2     6     1     2     2     1     2     3     1     4     3     20 E( R% ~& M5 x2 h+ n) M7 m
         1     2     3     4     2     7     1     4     3     1     7     3     3
    9 x# ], E% ]' [6 k     5     2     3     5     2     2     1     2     3     1     2     3     4
    * Y$ O  G3 w9 Y1 N4 C( j% M     5     2     4     1     2     2     5     2     3     7     1     6     2

    9 G! b: M/ M. s) Xdata2 =
         1     2     3     1     2     2     4     2     3     1     2     7     2& W1 @2 K9 u! ?6 o: S& i0 ~2 H
         1     2     3     6     2     2     1     4     3     1     5     3     1
    1 g# v% I6 S3 ]- y& L4 a) g" i$ f     1     2     3     1     2     5     1     2     4     1     2     3     2$ P3 P$ }# L! p: e' r. M' X
         1     2     7     1     2     2     1     2     5     1     2     4     1$ [5 _( w  L9 d6 A
         5     2     3     3     5     2     1     2     3     1     2     3     6; v5 T1 l- t4 |5 q9 b8 |" I
         1     2     3     1     2     2     1     6     5     1     2     6     4
    - O: G" M1 U, |0 d* ~& n, T/ }     5     2     3     4     4     2     1     2     3     1     2     5     6: _6 y+ ?: O( l( h* V
         1     2     6     1     2     2     1     2     3     1     4     3     25 U" o1 `+ e% m8 ~* n0 p( `7 a" K
         1     2     3     4     2     7     1     4     3     1     7     3     3
    0 m5 a- G6 t7 Y: |     5     2     3     5     2     2     1     2     3     1     2     3     4
    ( q4 U: {2 x: L: R) J8 }, w$ k* r7 |     4     2     5     1     2     2     6     2     3     7     1     6     4
    iteration 1, loglik = -327.1004657 V; T( A! F6 j, Y5 r4 w
    iteration 2, loglik = -238.259812
    5 @& x. W- D  C- Piteration 3, loglik = -232.962948: s5 y% v. d5 x9 l) `) r, Z6 i  E
    iteration 4, loglik = -223.323891/ d- y2 f  Y% l! u, O$ U! p2 u
    iteration 5, loglik = -207.6308759 ^0 k4 r! l1 N
    iteration 6, loglik = -191.0126973 k8 u4 j% Z: {9 A0 _& W+ B& H
    iteration 7, loglik = -178.611546
    $ l! Y8 i8 l$ J, A& uiteration 8, loglik = -171.524132
    * p3 l) V8 K/ N- ^" ?iteration 9, loglik = -168.626526( c8 }" j, t0 D2 p4 Z
    iteration 10, loglik = -167.387057
    1 ]1 O+ `1 l5 h: \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 `) ^; `5 ~  Qprior2 =
        0.0000
    # w; Z# k% e& o* \6 r& W    0.00003 S. K2 F% F, P6 M  h  t
        1.0000
    6 l1 ^( y# o+ u    0.0000+ O. Z+ N" p1 V4 n: ]0 p3 B% D4 }
        0.0000
    : V& |$ q7 _: x2 G! ]' N! g
    transmat2 =
        0.0138    0.0089    0.7680    0.1060    0.1033
      T% m) h! y) v: X) Y    0.7811    0.0000    0.0199    0.0067    0.19236 i& C1 r* w) U, N
        0.0000    0.9936    0.0000    0.0064    0.00008 g* |" e2 `  B: q* f' ]
        0.1686    0.2604    0.2242    0.3398    0.0070( y" ]; O9 y, r0 X/ {
        0.0053    0.0406    0.8350    0.1184    0.0007
    9 ?; \$ }& G" e9 a5 X/ U% G) {
    obsmat2 =
        0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.0351# r! J0 `0 Y9 f! Q! z
        0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.02282 I# ?* D! c1 C9 {
        0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.0000* S0 P6 \9 ]; R1 v: {) n; p& G$ y
        0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.0055
    2 o, s: D& j8 |0 [/ y  l; L/ z    0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
    iteration 1, loglik = -277.738670
    0 z5 C+ B# m2 @6 J" g* Miteration 2, loglik = -242.163247
    / z! K. l2 K! X5 ?3 i9 J/ fiteration 3, loglik = -238.321971: v2 o5 D( h6 q( D
    iteration 4, loglik = -233.166746& {& {) v4 a7 e2 i
    iteration 5, loglik = -225.682259; t8 O- c" y% V( B& _
    iteration 6, loglik = -214.560296
    , V6 w3 {, Q7 s1 siteration 7, loglik = -201.182015. k$ R! H  K" l* e3 f
    iteration 8, loglik = -189.4274535 \8 c$ ^0 \2 P* p! T2 q& i
    iteration 9, loglik = -179.1563529 q! G1 e- Q+ u6 [" d
    iteration 10, loglik = -171.744096
    7 [& c9 M2 ?- }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

    + O* I3 H4 @8 Fprior4 =
        0.0000. l7 a2 x7 [1 l9 g, ~: `
        0.9982
    6 U" n1 v3 o: a- g    0.0004
    4 \5 u$ c$ ?% z( N6 u+ {) s3 r    0.0014! p9 p/ y: Y1 t
        0.0000

    5 O9 U% {: U# {4 w3 h$ f& ptransmat4 =
        0.0873    0.5277    0.2799    0.1007    0.0045( t& T0 Q; H3 \2 G. G/ X
        0.0002    0.0000    0.0005    0.0000    0.9994
    - h% F/ j  K! ]& _; ^- _    0.0180    0.0000    0.0118    0.0011    0.9692
    . m1 ^) z; B( `5 X7 ?, W2 D: M, ^2 _    0.0436    0.0226    0.0810    0.0219    0.8310
    ) D5 Z* Q3 U; P6 J$ h    0.9746    0.0056    0.0003    0.0195    0.0000

    6 ^8 v# z1 T( ]2 F/ ?obsmat4 =
        0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.07706 c  r8 V2 B# ?- F% H
        0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.0000: B6 \: [0 d" E$ G+ ?
        0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001
    8 J* j% u$ [$ w+ F0 P    0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.0802
    0 D1 V' L: I* D4 C/ q' A0 y1 p    0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225

    ' u' `- y; k  K' edata1 =
         5     2     4     1     2     2     5     2     3     7     1     6     2

    ; L+ e6 o: d6 F) Ploglik =
      -19.2351

    . u5 m: n) Q2 Q3 N4 V; ologlik2 =
      -21.0715
    9 K0 d0 w- ^0 _& h3 L% G
    path =
         3     2     5     3     2     1     3     2     1     5     3     2     1
    - D: C% K# {8 Z; s( u& `0 D: W
    path2 =
         2     5     1     2     5     1     2     5     1     1     2     5     1

    , E/ m/ B1 R) }3 {" a- |5 gfuhe =
         1
    - K& d6 B7 b0 T: o

    ' r5 {5 s# k# N  U& N6 }: j* s3 s! I" 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-7-26 07:58 , Processed in 0.380410 second(s), 55 queries .

    回顶部