QQ登录

只需要一步,快速开始

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

    7 J3 B, B- i6 ]2 Y% ?0 m6 o隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱+ w( Q" Z2 `3 W0 T6 S1 H$ I+ N
    % ①定义一个HMM并训练这个HMM。: E8 p- _5 ]/ L
    % ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。
    ; a6 U1 q; `' A/ s% 修改:旺齐齐( a# E1 \- w- x: s/ l+ S
    % 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。
    1 l7 O& f  D( i  R7 w%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % O:观察状态数
    : l1 c8 p6 W" j( ^$ x4 ]O = 7;
    2 I# v+ D0 D0 U% }& tO2 = 7;
    , P% H8 K' \0 [9 S. h% Q:HMM状态数0 i# `: G1 d4 L! }; b! A% \
    Q = 5;" q) C- X0 G, x% _. D+ K
    Q2 = 5;
    , T; ~3 x! A, r# ?! ~' [2 n2 V%训练的数据集,每一行数据就是一组训练的观察值: B7 B$ ?( d) g( l
    data=[1,2,3,1,2,2,4,2,3,1,2,7,2;' I) ^! _- X+ N
          1,2,3,6,2,2,1,4,3,1,5,3,1;1 q6 L3 \) h/ ]8 [, w4 }
          1,2,3,1,2,5,1,2,4,1,2,3,2;
    $ H* W# X6 k, d+ a- k8 U      1,2,7,1,2,2,1,2,5,1,2,4,1;
    $ F3 F5 Q( l$ _1 B! \6 l      5,2,3,3,5,2,1,2,3,1,2,3,6;
    ( y4 o! h* d1 K* {% j; y( O  ]  h7 F      1,2,3,1,2,2,1,6,5,1,2,6,4;! k1 y& i- z8 u2 [
          5,2,3,4,4,2,1,2,3,1,2,5,6;
    8 |. P( Y: \2 k  f  _      1,2,6,1,2,2,1,2,3,1,4,3,2;+ m+ @6 o, V8 [; r3 O* n+ Z. t( g
          1,2,3,4,2,7,1,4,3,1,7,3,3;& J& N, J* ]. e: O9 K8 c
          5,2,3,5,2,2,1,2,3,1,2,3,4;
    + R+ W1 R: X) t; L! V5 V      5,2,4,1,2,2,5,2,3,7,1,6,2;]

    : q+ \7 f3 @- B7 q& [5 ?: b% E  data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;& D+ r$ R+ P( I
              1,2,3,6,2,2,1,4,3,1,5,3,1;. q1 q/ n# K; Z% p; |
              1,2,3,1,2,5,1,2,4,1,2,3,2;  t* t; \1 n0 B- O$ q9 h' Y
              1,2,7,1,2,2,1,2,5,1,2,4,1;
    * k2 X! \- t7 D. O          5,2,3,3,5,2,1,2,3,1,2,3,6;
    : Z" B; g. E- M, x- k- Y  T& d; h3 ^          1,2,3,1,2,2,1,6,5,1,2,6,4;. N! f. R4 B. v5 ]1 X  {& e
              5,2,3,4,4,2,1,2,3,1,2,5,6;
    ) h. l( j" [. y8 [4 b; i          1,2,6,1,2,2,1,2,3,1,4,3,2;
    ; m# f; ]' `7 V0 S9 ?7 {6 p          1,2,3,4,2,7,1,4,3,1,7,3,3;
    - t4 Q' B. O. _) c2 b3 X          5,2,3,5,2,2,1,2,3,1,2,3,4;, o  I1 l: k: j! f( W
              4,2,5,1,2,2,6,2,3,7,1,6,4;]
    % initial guess of parameters
    / U* S4 h+ {6 q% 初始化参数
    % d- m; _" i$ G$ @- D7 o/ l, sprior1 = normalise(rand(Q,1));
    " m& ?3 Q7 k1 z- t* W( I& Ktransmat1 = mk_stochastic(rand(Q,Q));
    8 e3 W) [& D9 t5 L' h; Pobsmat1 = mk_stochastic(rand(Q,O));
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  L" N# O0 M% c! c2 Y/ Q
    % 添加部分& a! c, r2 E! j
        prior3 = normalise(rand(Q2,1));, C" C: ]. Y4 X; ]3 H, Q& Y3 R
        transmat3 = mk_stochastic(rand(Q2,Q2));
    ( D! A+ f7 R- t    obsmat3 = mk_stochastic(rand(Q2,O2));! I9 N; f: X/ l" P5 Z2 g! O
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % improve guess of parameters using EM0 ]5 _6 |) N. f5 I+ r
    % 用data数据集训练参数矩阵形成新的HMM模型
    & n9 b8 u( I% t+ g. P) k[LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));5 C+ S: B4 t; e& H
    % 训练后那行观察值与HMM匹配度5 A4 V7 p  D+ y# V! X
    LL) l, k" i1 i' j- e
    % 训练后的初始概率分布
    4 J9 G" ~0 \% {; yprior2. S3 n) r) O! j1 p# Y* h
    % 训练后的状态转移概率矩阵" f7 i$ ?  r' R" t! {
    transmat2
    . R# r) L: a6 P) L& P% 观察值概率矩阵
    ( Z& G* u7 O$ M7 x# t/ E7 X5 Uobsmat2
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%6 c" K9 ?: ~0 u( ~+ E( M
    % 添加部分
    3 c8 S! q( E; w    [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));, O. B" H0 d0 s/ T
        LL2
    . U# D8 s  R$ p& g+ q% F" P, Z  j9 k    prior4
    # N* \( ]2 C4 o  B" j, t) ?    transmat4  E' S7 [! e( V: X* g( Z+ C
        obsmat4
    # ?8 M& O. E' f/ E$ N) T# ~& j%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % use model to compute log likelihood" s" i% _. H- e0 y: v7 q
    % data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]) J% D7 A9 h/ S1 d/ M, l
    data1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]
    / T; K5 D$ F0 J4 c% L4 j  ]loglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)4 L8 d; O9 Y, d' h4 y
    % log lik is slightly different than LL(end), since it is computed after the final M step
    2 x3 K3 B1 R" U6 K% loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
    % path为viterbi算法的结果,即最大概率path
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%7 z+ F( O3 L$ ^- i
    % 添加部分& O6 A3 R# S& E: ?
    loglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)3 L# v6 ], v0 X- ~% w
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    $ q3 C7 O# E1 |/ q# g( T: D8 W+ @B = multinomial_prob(data1,obsmat2);
    9 _$ _! ?3 u9 f- W1 O8 b" upath = viterbi_path(prior2, transmat2, B)
    # ?+ Z9 q" ~- D% Y4 i' psave('sa.mat');
    ' b; l& C' |+ v* o7 g
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%. E- n, Z9 M" S$ k+ x
    % 添加部分
    ' h5 B4 g+ z; E4 [0 n    B2 = multinomial_prob(data1,obsmat4);
    % W7 S0 ?% t  M. O$ U4 M    path2 = viterbi_path(prior4, transmat4, B2)
    8 f" Y/ i! [+ H; ~! ^3 Y    save('sa2.mat');4 V' m/ X" j, o& n
        if loglik2 > loglik
    % d$ k9 s2 ~( R! i) S        fuhe = 2& b1 P* K; z4 r4 f* M# [; ^
        else
    2 ^3 O$ {: y" `  d        fuhe = 1! L9 F% I6 [1 I5 U( E
        end    2 W7 v  {+ W$ p6 d2 n
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ------
    运行结果
    ------
    data =
         1     2     3     1     2     2     4     2     3     1     2     7     2- ?. z7 B- G+ O
         1     2     3     6     2     2     1     4     3     1     5     3     1
    : l2 x& C+ z% v' A* ~     1     2     3     1     2     5     1     2     4     1     2     3     2% A8 B; k" A4 c
         1     2     7     1     2     2     1     2     5     1     2     4     1! J- J& @1 u# o, C3 Q6 o
         5     2     3     3     5     2     1     2     3     1     2     3     6
    . e5 B" }4 u9 t, I  @     1     2     3     1     2     2     1     6     5     1     2     6     4
    ' n9 G' y" R' i  L6 B     5     2     3     4     4     2     1     2     3     1     2     5     6: ^# f, ]' w$ j& C5 X& A# K
         1     2     6     1     2     2     1     2     3     1     4     3     22 R7 d* e; o: m8 O
         1     2     3     4     2     7     1     4     3     1     7     3     3
    . K. z" E! x0 C, {9 |7 W     5     2     3     5     2     2     1     2     3     1     2     3     4
    # F0 A" J* T' m" X- w     5     2     4     1     2     2     5     2     3     7     1     6     2

    2 Z+ a) q$ X3 H3 K9 zdata2 =
         1     2     3     1     2     2     4     2     3     1     2     7     2
      V" H+ _6 i) I. l     1     2     3     6     2     2     1     4     3     1     5     3     16 m( P* t8 v1 M
         1     2     3     1     2     5     1     2     4     1     2     3     22 ]9 Y4 K8 c/ Z& Q  `% m
         1     2     7     1     2     2     1     2     5     1     2     4     15 G& {- Z; i; g3 a( Z3 Z
         5     2     3     3     5     2     1     2     3     1     2     3     6
    " s* j8 b- c) Q: l2 |  V     1     2     3     1     2     2     1     6     5     1     2     6     4
    1 E% y! z- u- q1 Y' f3 e% s5 @     5     2     3     4     4     2     1     2     3     1     2     5     6, o& A8 K) I% V- T2 |7 ~! R4 q
         1     2     6     1     2     2     1     2     3     1     4     3     2
    ) i" s9 e3 u' g/ V) S$ a     1     2     3     4     2     7     1     4     3     1     7     3     3
    ) I$ e/ k% G: w, n+ F     5     2     3     5     2     2     1     2     3     1     2     3     4
    8 a( r5 P3 c7 [1 p$ m4 L" ]* S     4     2     5     1     2     2     6     2     3     7     1     6     4
    iteration 1, loglik = -327.100465
    ( @% h2 o% k! {7 [; Ziteration 2, loglik = -238.2598127 b  c2 e7 E& f
    iteration 3, loglik = -232.962948+ i! [% y( Q8 j& u! t5 m
    iteration 4, loglik = -223.323891
    - {; {2 J$ l- V- F: O/ n, B/ Literation 5, loglik = -207.630875& X$ A! f. D! G, w6 \
    iteration 6, loglik = -191.012697
    , O4 I$ U( l7 S9 n0 I; niteration 7, loglik = -178.611546# l. }' x. Y+ ^1 L
    iteration 8, loglik = -171.524132
    ) ]6 Q+ Y' x" [  N4 X9 b/ n) witeration 9, loglik = -168.626526& S- k1 ]0 u8 p& Q. j
    iteration 10, loglik = -167.387057
    $ e. V) H# ~* B& @- oiteration 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

    4 X- Z. y' s; q7 o. C4 fprior2 =
        0.0000& c1 a1 s: ^" o0 x( F5 o/ ~
        0.0000& ?' Y) q9 V9 y; _% R
        1.00002 p0 ?9 ?3 E9 O& U% {" \
        0.0000
    + u2 w( ^/ B$ }( w- L! q5 ~8 E9 b3 Z- R: o    0.0000
    3 @2 c: ~: V. Q
    transmat2 =
        0.0138    0.0089    0.7680    0.1060    0.1033
    % W. p) g) A" C  I& C4 _    0.7811    0.0000    0.0199    0.0067    0.1923, D1 x% @1 J) j  r% D' F# a
        0.0000    0.9936    0.0000    0.0064    0.0000
    * S6 |$ s, a4 G* n0 O$ E    0.1686    0.2604    0.2242    0.3398    0.0070
    2 F% V2 y' @& @    0.0053    0.0406    0.8350    0.1184    0.0007
    ) X! N: U- R' V8 w, h* E
    obsmat2 =
        0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.0351
    " }# o3 R: R6 E7 B& D6 m    0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.0228- _& l( {8 j; z+ f! O9 u! _& S# k
        0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.0000
    ! i- h( g% m) p* @+ o    0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.0055
    ! z- x1 n: ]6 l3 J1 n7 D$ I  `" _/ d    0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
    iteration 1, loglik = -277.738670
    + ?( H" K  W) }) i6 q* {4 h. Iiteration 2, loglik = -242.163247( Z: T9 f, J& E7 u* \" Z
    iteration 3, loglik = -238.321971
    , @' |' c- z8 V8 L- ~/ D, O! d4 Citeration 4, loglik = -233.166746" J4 ?) R6 i( n; s. K8 U2 D8 d
    iteration 5, loglik = -225.682259# l: {  D2 @. i( x! B- [7 R
    iteration 6, loglik = -214.560296* u7 S: \+ |% q, Q' a3 O& b# M( i
    iteration 7, loglik = -201.182015
    % A# Z0 l* {( `5 p/ n+ v1 literation 8, loglik = -189.4274536 K: S: {8 J7 b: a$ p
    iteration 9, loglik = -179.156352' _; \; z, Q! ?7 h0 _
    iteration 10, loglik = -171.744096- R: c% ^% w8 T* s  q
    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
    % P5 ~' A+ X# }% ~8 F1 x
    prior4 =
        0.0000. w6 e8 X1 e0 H0 q% f  @( v
        0.9982
    . `  M. y7 {$ S0 x% a7 [    0.00044 ?4 }0 i. B0 o  v
        0.0014
    7 L4 D) H: |/ r- }    0.0000
    - G  e0 z8 {1 r& `7 h
    transmat4 =
        0.0873    0.5277    0.2799    0.1007    0.0045
    ! w- M3 Q" _. y7 Z  P# y2 y8 ]0 d    0.0002    0.0000    0.0005    0.0000    0.9994* F2 s" a/ V9 m# H4 N' O
        0.0180    0.0000    0.0118    0.0011    0.9692
    4 D; C) t) Z0 ?7 g2 X    0.0436    0.0226    0.0810    0.0219    0.8310
    $ [; u' Z4 Y, x& q1 f    0.9746    0.0056    0.0003    0.0195    0.0000
    7 ^9 |7 c% o0 H5 }9 n9 {
    obsmat4 =
        0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.0770, I3 w: P/ C) m$ ~
        0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.00008 W9 V- T" s' M/ @1 S6 j  v% a7 B
        0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001
    9 u1 ], R9 w  P/ g3 S% }( s4 ]6 G    0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.0802" E- g' g) Q! I8 H  W. m. f* Z, P
        0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225

    . g/ H5 z! ?( R% c6 Wdata1 =
         5     2     4     1     2     2     5     2     3     7     1     6     2
    0 Q# a8 O5 j( q$ {- F/ f2 a
    loglik =
      -19.2351

    ' S3 T$ J1 L& J8 o1 J& Nloglik2 =
      -21.0715
    + i4 r( w9 j2 _. v6 X
    path =
         3     2     5     3     2     1     3     2     1     5     3     2     1

    ! y7 l3 y) v( spath2 =
         2     5     1     2     5     1     2     5     1     1     2     5     1

      i/ U/ c7 \  \" S. B9 h# W2 Yfuhe =
         1
    8 q, x1 F* x9 O6 o

    % x- c2 N6 }6 }
    ' b/ q2 W# d/ H1 @

    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-10 05:38 , Processed in 0.483009 second(s), 56 queries .

    回顶部