QQ登录

只需要一步,快速开始

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

    2 `- {/ n0 y2 C) h0 ~隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱/ N/ d: S3 c6 m, X
    % ①定义一个HMM并训练这个HMM。
    6 f1 E0 f) e- F1 T% ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。
    % n# Z! T, a. s: h, ?% 修改:旺齐齐
    2 _* n1 o' C$ y+ R0 q! ?8 o7 s- `% 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。4 G% F( v& {9 J" W) v1 T* U9 ~
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % O:观察状态数
    . z/ V; @. V8 v' DO = 7;" I* T9 T7 i" u$ K1 j
    O2 = 7;( O( {5 n. D$ D* `% E& D
    % Q:HMM状态数8 W7 a* t  ^- T$ }
    Q = 5;$ m$ g8 _. F& N7 _
    Q2 = 5;
    ; I9 k3 m& W0 E6 s. j0 i%训练的数据集,每一行数据就是一组训练的观察值
    ; r* Y, _- R0 _: U6 r9 tdata=[1,2,3,1,2,2,4,2,3,1,2,7,2;
    1 r9 C, ~5 }8 o  q) i      1,2,3,6,2,2,1,4,3,1,5,3,1;
    : [- P( U- m2 F8 B      1,2,3,1,2,5,1,2,4,1,2,3,2;6 R3 X  r6 W  Y5 j- D: t
          1,2,7,1,2,2,1,2,5,1,2,4,1;
    7 n. F5 ^. D, M; Z4 _      5,2,3,3,5,2,1,2,3,1,2,3,6;
    . x& ]+ P% Z$ I7 C- `; C; g6 h      1,2,3,1,2,2,1,6,5,1,2,6,4;
    5 i- y( i% r$ h7 F$ l4 c      5,2,3,4,4,2,1,2,3,1,2,5,6;
    2 D$ n  h- O- _0 W  u4 j4 U      1,2,6,1,2,2,1,2,3,1,4,3,2;7 D: B- w- n3 S" _5 A$ t! ^7 B* H
          1,2,3,4,2,7,1,4,3,1,7,3,3;8 \: o0 _4 f* P) X+ a
          5,2,3,5,2,2,1,2,3,1,2,3,4;, E& _; Z6 ?9 ~/ F6 U0 n
          5,2,4,1,2,2,5,2,3,7,1,6,2;]

    ' G' J) \' |& U9 S  data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;5 M8 ]; ?9 z* x  M' y
              1,2,3,6,2,2,1,4,3,1,5,3,1;
      y, _. l/ I1 d  I" Z2 Q, K: C6 P9 J/ V          1,2,3,1,2,5,1,2,4,1,2,3,2;
    3 j) ]. r8 n& ?) f0 C8 Y: |; a          1,2,7,1,2,2,1,2,5,1,2,4,1;
    ' G: t3 y5 {. ^7 L- ?          5,2,3,3,5,2,1,2,3,1,2,3,6;
    4 S/ F5 @% A, ]; g          1,2,3,1,2,2,1,6,5,1,2,6,4;
    7 n/ ]/ e" k3 @& ]0 Q5 d- n          5,2,3,4,4,2,1,2,3,1,2,5,6;4 K0 L% Q/ E& K- z
              1,2,6,1,2,2,1,2,3,1,4,3,2;
    ! T+ j4 ^' r9 }8 j8 o% R. ], f          1,2,3,4,2,7,1,4,3,1,7,3,3;
    # M. W9 A  d7 y" l0 _4 V          5,2,3,5,2,2,1,2,3,1,2,3,4;' i) K/ H1 |7 M  n
              4,2,5,1,2,2,6,2,3,7,1,6,4;]
    % initial guess of parameters
      v+ v: n1 U/ w5 e% 初始化参数
    $ o6 z$ p$ U4 \. N- c3 jprior1 = normalise(rand(Q,1));" K: ~7 V% {8 w6 D7 r+ u
    transmat1 = mk_stochastic(rand(Q,Q));
    ' F) |! ?# }1 e- ~% r) a7 G4 j* S  zobsmat1 = mk_stochastic(rand(Q,O));
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    * y* S( O1 j  k, }& [% 添加部分
    2 r9 V6 W2 b* X. j' E    prior3 = normalise(rand(Q2,1));
    8 K# V- ^! |3 `# c  f/ H8 o+ ]7 W! q    transmat3 = mk_stochastic(rand(Q2,Q2));/ O) y1 K$ }5 K& r0 }" S( Y! [
        obsmat3 = mk_stochastic(rand(Q2,O2));
    & [  ~9 e( A5 `# }8 L) j* _8 k/ h' N%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % improve guess of parameters using EM  D, Q5 P* ~0 W, _, D  E
    % 用data数据集训练参数矩阵形成新的HMM模型
    9 R0 e$ u+ I# T8 K8 y" G[LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));4 V- e  O2 J4 ^' S5 e/ ]- B
    % 训练后那行观察值与HMM匹配度  [6 {. T5 x9 Y! ]  \) Z" i
    LL; Z8 [0 q  h, Z7 e
    % 训练后的初始概率分布
    & q( A  z1 P/ |! V9 J. J0 @% Eprior2
    2 T0 R  A; r# A* x! B% _% 训练后的状态转移概率矩阵
    5 V' U& D( ]6 ]transmat2
    8 t5 Z' D8 i2 b1 h4 ^% 观察值概率矩阵: F% z; d/ D" Q5 f% y
    obsmat2
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$ r; m4 X  f. M2 _0 X) U
    % 添加部分8 e) @" w+ d2 t
        [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));
    0 M- p' P; u9 T2 {    LL22 U, J. {! h% x3 e- w
        prior4' \" p1 t( o& @7 G; d
        transmat4' u) E3 k; M( X  y" G  u2 s
        obsmat4. z5 B! N+ {- j7 V+ c  |% z
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % use model to compute log likelihood7 k8 X& t# g( I2 a/ f0 \6 Q7 E
    % data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]/ D$ d1 X5 h- ]  W5 ~5 j
    data1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]2 d! P% X( ]; `1 ]9 F+ }' N
    loglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)
    ; A' |. d( D+ ]% log lik is slightly different than LL(end), since it is computed after the final M step0 u, r$ v+ R( X0 Z0 {4 k2 n
    % loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
    % path为viterbi算法的结果,即最大概率path
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ) t3 c$ E' F% I. j& t. T% 添加部分: w  x$ [" U" R3 a& |, B7 {- s
    loglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)
    : p8 e% g' [  S9 u%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    & |* d" D2 h7 G0 u5 W% Q2 yB = multinomial_prob(data1,obsmat2);
    5 P/ n+ Y5 \' N! S$ zpath = viterbi_path(prior2, transmat2, B)" A+ G0 O: h' K* z0 D% l* y2 u
    save('sa.mat');

    ; d) T+ q( Z7 P9 o4 K$ U7 d" y%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    3 ?. P6 P9 `: j% 添加部分, r  X6 r8 r2 M$ |$ `( u* L
        B2 = multinomial_prob(data1,obsmat4);
    ; }7 M( e, m, v9 w! S    path2 = viterbi_path(prior4, transmat4, B2)6 |2 K  `  n: _2 Y! B5 h
        save('sa2.mat');) m5 z) ?7 ]+ u$ @: P
        if loglik2 > loglik + M9 _* z3 e( Q" \: K& D
            fuhe = 2: p' u5 v( Y7 _
        else. Y( E1 l& @* l
            fuhe = 1
    ' U. H% Z3 {, U5 A' F8 ~    end   
    ) U& W. z; _5 h$ E: Q+ G%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ------
    运行结果
    ------
    data =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    ! y  s: P+ U1 X     1     2     3     6     2     2     1     4     3     1     5     3     10 W% w1 W5 S3 L6 w2 S3 s
         1     2     3     1     2     5     1     2     4     1     2     3     2
    % Y  p# {) s& N, v+ F+ N     1     2     7     1     2     2     1     2     5     1     2     4     1
    ! q3 D* k1 d9 v" P     5     2     3     3     5     2     1     2     3     1     2     3     6
    : R6 P# b- i( R3 h) N3 E! K. I     1     2     3     1     2     2     1     6     5     1     2     6     4
    # u' C9 Z) a4 h& u8 F     5     2     3     4     4     2     1     2     3     1     2     5     6$ J6 A! H4 y  i8 x1 l
         1     2     6     1     2     2     1     2     3     1     4     3     2
    ( g3 V* }- R3 o7 w: j     1     2     3     4     2     7     1     4     3     1     7     3     33 @1 f: ^: b7 H7 a! G' W
         5     2     3     5     2     2     1     2     3     1     2     3     4
      z/ L2 `& c( r' `     5     2     4     1     2     2     5     2     3     7     1     6     2
    * z! g  [# D% F, \: `* i* R
    data2 =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    ; _" T) N% T  d1 O     1     2     3     6     2     2     1     4     3     1     5     3     1
    ) d- I1 E! ~+ E% x     1     2     3     1     2     5     1     2     4     1     2     3     2. x/ l  R) w" d
         1     2     7     1     2     2     1     2     5     1     2     4     1, s% t2 X2 K6 W$ N9 r
         5     2     3     3     5     2     1     2     3     1     2     3     6
    + [" D! V0 |  g, o# n: V4 X. ?     1     2     3     1     2     2     1     6     5     1     2     6     4* X( R- l, ?' S% r3 o
         5     2     3     4     4     2     1     2     3     1     2     5     68 h: h+ h" a2 k; V) Y$ W+ `5 r( V  r
         1     2     6     1     2     2     1     2     3     1     4     3     2
    ! U+ B) P9 j9 h4 v     1     2     3     4     2     7     1     4     3     1     7     3     3: B. F2 m/ t; {% D; `
         5     2     3     5     2     2     1     2     3     1     2     3     4
    ) K+ S, Z  |8 G7 }4 M     4     2     5     1     2     2     6     2     3     7     1     6     4
    iteration 1, loglik = -327.100465
    3 |- A/ j4 a( g9 t; Riteration 2, loglik = -238.259812
    2 }( F& U" g) \  L& [( k/ ~iteration 3, loglik = -232.9629480 Y0 Q0 y3 L  ~" n: X" q
    iteration 4, loglik = -223.323891
    / L$ i1 z0 |- e: F$ qiteration 5, loglik = -207.630875
    " Y- }% q  _: U; [3 o* R% y2 riteration 6, loglik = -191.012697( Y% `2 ^& J$ X% o6 L
    iteration 7, loglik = -178.611546# n$ Z% m' x. B
    iteration 8, loglik = -171.524132
    * ]. M& W; ^2 b/ ~& Y& Aiteration 9, loglik = -168.626526
    3 T* n9 g, j& U- [  G* O1 ~' Niteration 10, loglik = -167.3870570 H- f+ S" Q. D
    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
    # `* U, G3 C2 r2 {/ k8 `- Z* X
    prior2 =
        0.0000
    " l, U; G" e. s" n1 K, u    0.0000) t3 D# {, z) F. s; O0 h3 u
        1.0000
    + [3 Q/ l) R7 M& ]    0.0000
    ! i- K3 e! W6 X* V6 c$ ]  z    0.0000
    0 k" L% H* y: N5 G1 m
    transmat2 =
        0.0138    0.0089    0.7680    0.1060    0.1033
    ! a$ V* Z' P3 }4 r    0.7811    0.0000    0.0199    0.0067    0.19234 T( T* t2 ^4 k6 g' t6 T
        0.0000    0.9936    0.0000    0.0064    0.0000
    . l8 c$ ]3 c. D& X2 K! S8 \    0.1686    0.2604    0.2242    0.3398    0.0070
    8 r6 K+ a: _' U2 d# m  P    0.0053    0.0406    0.8350    0.1184    0.0007

    / N9 n- z% x' f6 L6 ~$ Jobsmat2 =
        0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.0351
    % d+ X% r( j8 v$ u    0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.02281 C; `, I3 O0 u! y
        0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.0000
    0 Z: r# o4 Z2 j% i    0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.00555 i1 A) G7 s1 I0 \/ @0 t7 x& V
        0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
    iteration 1, loglik = -277.738670; G2 i" I1 w! T4 D3 [
    iteration 2, loglik = -242.163247
    3 q) t5 K' v9 Z( K5 @, _4 \& M7 @5 jiteration 3, loglik = -238.321971
    0 l* U( }# h) g+ Q. _: U( diteration 4, loglik = -233.166746
    & ]" `( f$ Y9 niteration 5, loglik = -225.682259
    7 R& v6 {1 T/ |- |( m9 q$ [iteration 6, loglik = -214.5602968 F, z3 O% Q+ H
    iteration 7, loglik = -201.1820154 q% Z% c/ h2 c
    iteration 8, loglik = -189.427453
    ! H/ h: \8 R) C2 Uiteration 9, loglik = -179.156352
    . ?6 S( ^( l5 E* Piteration 10, loglik = -171.744096; B  p: d0 d/ I; V0 y0 ?
    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

    : d7 ~4 Y' v* |4 `/ P/ ]7 t' W% @prior4 =
        0.0000
    1 X! A5 |7 ]' h5 j    0.99825 l) \( |* d2 g3 b7 g
        0.0004! R  U6 Z" B. r9 a
        0.0014+ V8 T9 j4 K$ Q4 ?9 f) ^+ j. ^
        0.0000

    - t0 s. @$ X( t1 O/ I* Vtransmat4 =
        0.0873    0.5277    0.2799    0.1007    0.00458 i  j1 t! l: u5 x1 B! D1 i
        0.0002    0.0000    0.0005    0.0000    0.9994
    $ G) d* Z% l5 a, u- h, ^" n0 Y    0.0180    0.0000    0.0118    0.0011    0.96928 u1 V! ~' q5 a: d
        0.0436    0.0226    0.0810    0.0219    0.8310
    ; ?$ M' e  @( ^# V1 ~    0.9746    0.0056    0.0003    0.0195    0.0000

    " D8 e( q6 L% S$ }obsmat4 =
        0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.0770
    ' {: s3 O% ~* I4 Q" N' O5 e    0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.0000
    6 ?; [& l/ L9 n% W+ f    0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001
    . \% s' }5 R/ W4 k7 Y0 w: K6 F    0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.0802
    & m9 K6 v2 _% P* v6 o: F' K    0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225
      q& p. F1 _# U
    data1 =
         5     2     4     1     2     2     5     2     3     7     1     6     2
    $ f6 I' B0 u. N
    loglik =
      -19.2351
      _9 ^0 A( x' |- j, _: v
    loglik2 =
      -21.0715
    / H2 V2 {  I' U
    path =
         3     2     5     3     2     1     3     2     1     5     3     2     1

    % A6 G. O# }) V3 n1 g" mpath2 =
         2     5     1     2     5     1     2     5     1     1     2     5     1

    # ~( p' V! N9 i) o! T) ufuhe =
         1

    4 ~* [# h) b9 W/ n6 M) s8 f- P' U  K$ O4 H2 j& m, x8 F) i

    ( c# m8 R; h5 q; 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 00:59 , Processed in 0.436559 second(s), 55 queries .

    回顶部