QQ登录

只需要一步,快速开始

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

    5 f6 b8 L& n& J% Y! P9 C+ m隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱/ R* k7 x/ L! ~/ ~
    % ①定义一个HMM并训练这个HMM。
    7 |; M0 ~* f- `% ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。
    : D, q' O( k/ ~7 s' W* s% 修改:旺齐齐
    : o! P+ M  K8 v! @# |8 C% 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。
    ) J0 @) b( \. O9 M/ e+ `%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % O:观察状态数! B% G* U/ L, m2 I0 b( T
    O = 7;1 k' q6 u6 _6 ~6 c, Y
    O2 = 7;! n( Y$ ]' e  ^+ Z3 y7 i3 u
    % Q:HMM状态数7 h4 e, t0 c/ H" i
    Q = 5;
    - l; |0 f# ^* z7 \3 X1 XQ2 = 5;
    $ |% g# e( `, M2 S# W$ V# q- E%训练的数据集,每一行数据就是一组训练的观察值
    ; C9 s2 N: L% Bdata=[1,2,3,1,2,2,4,2,3,1,2,7,2;7 e7 k1 E% q# m& O
          1,2,3,6,2,2,1,4,3,1,5,3,1;$ O9 f4 y8 h! r4 n! N
          1,2,3,1,2,5,1,2,4,1,2,3,2;6 e- D3 b: [! U2 b* O
          1,2,7,1,2,2,1,2,5,1,2,4,1;
    ) z, P# N- W# T7 X; Q      5,2,3,3,5,2,1,2,3,1,2,3,6;
    0 m  T% X& T# A  F" v      1,2,3,1,2,2,1,6,5,1,2,6,4;9 n8 {% S) L3 O4 }% |) @- ^6 E
          5,2,3,4,4,2,1,2,3,1,2,5,6;
    ( I8 C% m7 e0 l      1,2,6,1,2,2,1,2,3,1,4,3,2;8 L) S$ k& o$ U
          1,2,3,4,2,7,1,4,3,1,7,3,3;
    . _. k  E2 O; x: _      5,2,3,5,2,2,1,2,3,1,2,3,4;
    / z, D) t6 w. B% h0 i) d      5,2,4,1,2,2,5,2,3,7,1,6,2;]
    5 R) a* Y7 p3 t. o5 i
      data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;$ N; j0 n4 @1 v! R4 ^4 }3 u
              1,2,3,6,2,2,1,4,3,1,5,3,1;" Q$ e- [' x7 T' v, ~
              1,2,3,1,2,5,1,2,4,1,2,3,2;
    3 x( `; m4 F, `: g          1,2,7,1,2,2,1,2,5,1,2,4,1;3 @3 N! u$ O7 x5 n( f3 T! K7 T
              5,2,3,3,5,2,1,2,3,1,2,3,6;- R* {) @2 n& {6 a! D! X
              1,2,3,1,2,2,1,6,5,1,2,6,4;
    6 R/ w" M. j$ ]  }9 v, l  X1 z( S          5,2,3,4,4,2,1,2,3,1,2,5,6;
    6 l) M( {, U! W! m          1,2,6,1,2,2,1,2,3,1,4,3,2;
    ( o& E7 z% i8 W0 U7 H" [7 ~          1,2,3,4,2,7,1,4,3,1,7,3,3;
    + w7 N- z- ?4 l0 o          5,2,3,5,2,2,1,2,3,1,2,3,4;
    & {0 G8 W* M/ i) u          4,2,5,1,2,2,6,2,3,7,1,6,4;]
    % initial guess of parameters
    $ W4 h' d1 Q0 M# t- P, Z$ V% 初始化参数2 f' T9 r: K+ A
    prior1 = normalise(rand(Q,1));" J  D; I& [- E( K
    transmat1 = mk_stochastic(rand(Q,Q));8 p+ O! q3 Q: P) f- n
    obsmat1 = mk_stochastic(rand(Q,O));
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    : A3 q+ \- h7 M: B  z( k! p% 添加部分
    . R: I$ J$ v* o9 m0 z    prior3 = normalise(rand(Q2,1));
    + c4 Y. [- F# Q! b# p    transmat3 = mk_stochastic(rand(Q2,Q2));0 w4 C4 }0 c4 `$ I  k$ Y6 |) }5 g
        obsmat3 = mk_stochastic(rand(Q2,O2));
    2 _. |5 X$ U2 p8 I# }" c, N! U%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % improve guess of parameters using EM
    : N# k- o' w$ C3 c9 c7 W% f% 用data数据集训练参数矩阵形成新的HMM模型& S) t4 h8 h# m9 H
    [LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));4 p- K. J/ N5 i$ I- A) ^
    % 训练后那行观察值与HMM匹配度' r. r9 l" r1 w6 l: I
    LL
    0 V+ J9 ]( P: Z6 Z) s! I& }% 训练后的初始概率分布
    7 A2 [5 p! K" l0 d9 o$ h* [) b% pprior2* s7 ?, w% w1 S8 Q! t# D# L
    % 训练后的状态转移概率矩阵' Y# P# r7 E& y3 f% ?: f. A8 L; Y
    transmat26 f4 x# S7 P: }5 k* q9 O, t9 s% n
    % 观察值概率矩阵
    % H$ j4 T0 q. Z- K5 m9 Pobsmat2
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%1 Z9 \: v2 m3 G  b9 m
    % 添加部分  K  O) k) ]) `5 b
        [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));5 b5 K! \4 U9 X+ @8 P; q1 F8 g& y
        LL2. V2 I" a- _) k" `! R1 f
        prior4
    8 z, O6 u4 x/ y    transmat4( K7 u  V: m7 \
        obsmat46 d: g* i# W* ~# R) _" l  [
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % use model to compute log likelihood
    1 P5 U, X$ O3 M+ R0 \3 D" u# b% data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]+ [* T9 i4 C, \. i0 d8 }+ |% ]
    data1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]
    2 g% H' d6 Z9 a9 M' Ologlik = dhmm_logprob(data1, prior2, transmat2, obsmat2)5 w) R" }, A- y7 P; w
    % log lik is slightly different than LL(end), since it is computed after the final M step
    * t- T0 ?2 ~! Z' T% loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
    % path为viterbi算法的结果,即最大概率path
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%- p% Q: X) R7 l. \. ]/ ]
    % 添加部分
    ! @" C8 O9 N" f# R3 Jloglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)4 F* u' `  O+ n* q9 L2 L
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    / E9 m" m& V( w* I
    B = multinomial_prob(data1,obsmat2);
    + x8 N8 t; E  G5 Q6 R- ^path = viterbi_path(prior2, transmat2, B)
    : d3 [! b6 g5 f1 `9 D( qsave('sa.mat');

    1 d! W! @' ]! w+ e% `0 C& p  S%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ) y& f2 s$ t, H0 E/ [% 添加部分( ^5 b% Y1 ?0 A3 }
        B2 = multinomial_prob(data1,obsmat4);
    5 v7 I+ W" z) _  }, l( U% \7 X, s    path2 = viterbi_path(prior4, transmat4, B2)
      C4 x0 f  d) h, U    save('sa2.mat');
    , m( S0 ^$ D& A    if loglik2 > loglik 0 S: j+ R2 S- a$ E% H& }
            fuhe = 29 n; X: e2 R) S8 h. Q4 l
        else* m9 r/ e& |4 y/ _) ^
            fuhe = 1
    9 I2 f" B0 f& c& o+ i  N4 u6 y    end   
    ! a, j5 E' Z9 m& t" o" w. i( w# o%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ------
    运行结果
    ------
    data =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    6 v+ ^! [& e% H. L. N# w4 \/ A     1     2     3     6     2     2     1     4     3     1     5     3     1* X6 N8 V7 v4 V4 e: U: V: @+ j
         1     2     3     1     2     5     1     2     4     1     2     3     2
    5 _5 H' l( J3 _     1     2     7     1     2     2     1     2     5     1     2     4     1
    / ]: V  o8 B1 `% |     5     2     3     3     5     2     1     2     3     1     2     3     6( N9 H: t! n( m4 X
         1     2     3     1     2     2     1     6     5     1     2     6     47 G$ f% V- I3 L4 X2 \: l" _
         5     2     3     4     4     2     1     2     3     1     2     5     6, ~, e+ ^, @- m* o6 E; T/ g
         1     2     6     1     2     2     1     2     3     1     4     3     2
    , {) [# d% y4 l* Z3 t. `, X( L; v     1     2     3     4     2     7     1     4     3     1     7     3     31 E+ i# V& H4 ^8 G
         5     2     3     5     2     2     1     2     3     1     2     3     4
    1 Z' t% s) a+ _4 N/ u     5     2     4     1     2     2     5     2     3     7     1     6     2

    5 p% ?: O7 G6 d5 z: q, `9 _data2 =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    ! i; W) K' o; J1 T$ C; c     1     2     3     6     2     2     1     4     3     1     5     3     1% }+ {/ c% F# N4 f7 ^
         1     2     3     1     2     5     1     2     4     1     2     3     2
    9 y: E, d+ D+ g* o! U7 U3 w3 h     1     2     7     1     2     2     1     2     5     1     2     4     1
    + A! B; r! K. Q: c     5     2     3     3     5     2     1     2     3     1     2     3     69 @7 G9 Q. U1 T6 C: o* p
         1     2     3     1     2     2     1     6     5     1     2     6     4
    ; B3 A3 e  n7 b/ W- \" a5 h     5     2     3     4     4     2     1     2     3     1     2     5     6
    1 K7 a" X& N" T3 K7 m' r$ N4 ~     1     2     6     1     2     2     1     2     3     1     4     3     2; A/ h  s, A0 U0 j4 C
         1     2     3     4     2     7     1     4     3     1     7     3     3+ _$ X: ?9 T+ s  w% e. Z
         5     2     3     5     2     2     1     2     3     1     2     3     4* r4 u; ?5 J  L. G9 @$ s  M
         4     2     5     1     2     2     6     2     3     7     1     6     4
    iteration 1, loglik = -327.100465. K! ?) ]$ Q. G0 u& e% H; ~
    iteration 2, loglik = -238.259812/ [5 e; C$ z& S5 y6 K) M
    iteration 3, loglik = -232.962948  s/ J9 t* k7 h: y9 Z
    iteration 4, loglik = -223.323891) I, C, U% N3 e/ T+ a$ I; N
    iteration 5, loglik = -207.630875
    # G( i2 y' j' b' l# x5 viteration 6, loglik = -191.012697
    # c  C$ A, c! [' Q& Q; f; ~iteration 7, loglik = -178.611546/ A, P% D8 p5 o# f- y; [1 _# @6 g
    iteration 8, loglik = -171.524132- y" |5 {2 n# r
    iteration 9, loglik = -168.626526
    ; |3 E. o0 F9 p! h& z0 p8 Citeration 10, loglik = -167.387057
    & w* x. ?* y# _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 Q, a. t1 {( a5 S; V
    prior2 =
        0.0000
    3 v1 n* c# V+ b" X& Q    0.00001 F( G# m2 I( c; F. q
        1.0000* h# ~/ d4 q1 o' p' X
        0.00007 B) i  }( }& R# Q/ B
        0.0000

    & x+ l+ ]! [5 w* w: D3 Gtransmat2 =
        0.0138    0.0089    0.7680    0.1060    0.10331 y& g/ Q3 ?/ g% b* y
        0.7811    0.0000    0.0199    0.0067    0.1923% {1 f; j# y  a3 R) |
        0.0000    0.9936    0.0000    0.0064    0.0000
    , `: W, v* ^* Q3 E    0.1686    0.2604    0.2242    0.3398    0.0070& o+ v+ V) w: n. Z6 ]
        0.0053    0.0406    0.8350    0.1184    0.0007

    - B; e. K: ^0 Z' m+ @+ C+ }9 Sobsmat2 =
        0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.0351
    " r: O! x) g3 f: K0 d  `    0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.0228$ I% T# F6 Z9 w3 B+ k
        0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.0000; P" U2 s8 G3 z5 B# _4 N
        0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.0055
    % h6 Z" W. a1 Y" u. u9 e1 S# x( A    0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
    iteration 1, loglik = -277.738670
    5 [; h1 p5 O" i6 ^% [9 Jiteration 2, loglik = -242.163247
    9 a. T1 K: d. ?0 E2 b# biteration 3, loglik = -238.321971( r, s; D5 k5 t) ]' k/ E- T
    iteration 4, loglik = -233.1667468 {- u7 N+ k) ~  `; N+ S0 T
    iteration 5, loglik = -225.682259
    9 z( f1 ?" H7 t" H+ n9 Piteration 6, loglik = -214.560296
    + L; q. R1 Y" a8 J6 @iteration 7, loglik = -201.182015
    $ F4 F, O  y5 B1 titeration 8, loglik = -189.427453
    " ]1 [$ |' f, ^! s- literation 9, loglik = -179.156352- g( V& E& @. v# e
    iteration 10, loglik = -171.744096
      k* r7 ^9 u; I' W) c: Eiteration 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
    - V6 _* ^7 @* k# T
    prior4 =
        0.0000
      d' T, I$ K" P0 g4 ^7 g8 Z- l    0.9982
    * L  r8 d1 `( T  @    0.0004( U7 T# l6 [6 A# U$ J
        0.0014
    ) m) A1 O- r7 w/ G- D1 {! V- B3 r    0.0000

    " j6 y, X# i7 c. ftransmat4 =
        0.0873    0.5277    0.2799    0.1007    0.0045
    * w0 @2 k! o( C/ F8 W    0.0002    0.0000    0.0005    0.0000    0.9994
    9 z/ Q- s* |( M4 y9 V    0.0180    0.0000    0.0118    0.0011    0.9692* r  B9 \+ I# F6 W2 h. X. D
        0.0436    0.0226    0.0810    0.0219    0.8310
    ; [; ]2 [" q3 y. r$ x3 }* x1 G    0.9746    0.0056    0.0003    0.0195    0.0000

    + s# o$ Z; j# q3 h5 fobsmat4 =
        0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.0770
    8 s1 i! r" M% C    0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.0000
    - I9 e. p( d" D  [" A" ?" i1 n    0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001" H# w4 l- Q. K/ N% l; Q: i
        0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.08021 h3 a! B$ c; q" T8 F. i
        0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225
    & u1 a* Q, m/ N0 \2 x. V' G  P
    data1 =
         5     2     4     1     2     2     5     2     3     7     1     6     2

    / @9 S6 U3 E. y7 nloglik =
      -19.2351
    * i# i) e9 k! b7 Y  {
    loglik2 =
      -21.0715
      f. y) V/ V2 B3 Z% F4 {3 G
    path =
         3     2     5     3     2     1     3     2     1     5     3     2     1

    6 l6 I1 i8 w7 t6 B5 Gpath2 =
         2     5     1     2     5     1     2     5     1     1     2     5     1
    ( w0 e9 N3 F. e
    fuhe =
         1
    : F. P  h; O" H4 D

    % ?, B0 X7 b* m
    $ z. U% r* @4 K; l3 E0 g

    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-4-20 17:41 , Processed in 0.458073 second(s), 54 queries .

    回顶部