QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1754|回复: 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
    : |! i- e+ ^  o5 Y  ?
    隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱: J* E: P% t: Q0 Y/ B- G! b* ~7 e
    % ①定义一个HMM并训练这个HMM。
    # m8 {  s; j; [; s0 K% ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。5 x+ [, C. b$ J0 F2 i- i$ V, U& |
    % 修改:旺齐齐
    # A: Q) }: Y5 ^+ ]( n. J$ ^% 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。
    3 @8 s$ u+ m* `9 \+ R9 A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % O:观察状态数
    " \* a) W. h) c" M7 yO = 7;
    : q5 |% B* ?/ N7 p, pO2 = 7;1 e5 l$ x* n3 H4 ^, ?% s6 }( |
    % Q:HMM状态数$ Z/ I( G, b6 w( i) r
    Q = 5;1 {, I. l% ~8 X4 a, Y
    Q2 = 5;+ f& ^% K7 b4 d0 ]% P1 v$ ]1 \
    %训练的数据集,每一行数据就是一组训练的观察值
    $ I0 a( c$ y* N, n. s4 _) q9 hdata=[1,2,3,1,2,2,4,2,3,1,2,7,2;
    , o* b  F9 v# C5 Y2 f      1,2,3,6,2,2,1,4,3,1,5,3,1;
    ; n2 _' f. q( R# j      1,2,3,1,2,5,1,2,4,1,2,3,2;
    . S: W$ u+ P% t2 c* r      1,2,7,1,2,2,1,2,5,1,2,4,1;. r: G, P& J" c2 B2 m! R
          5,2,3,3,5,2,1,2,3,1,2,3,6;8 l; a+ u' H2 E7 J1 g4 W0 L
          1,2,3,1,2,2,1,6,5,1,2,6,4;
    ) C) V/ D9 `% b& n3 g; `  g      5,2,3,4,4,2,1,2,3,1,2,5,6;
    3 C$ A1 `1 E& X* r      1,2,6,1,2,2,1,2,3,1,4,3,2;, k) I" x# m- h# T+ S2 e
          1,2,3,4,2,7,1,4,3,1,7,3,3;
    5 t* h0 x/ A. n* ?$ A      5,2,3,5,2,2,1,2,3,1,2,3,4;, o0 x+ w( a" v: B0 R! r
          5,2,4,1,2,2,5,2,3,7,1,6,2;]

    # p" g, T+ ^! P  data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;1 V' ?# Z+ _: J- H* [: G
              1,2,3,6,2,2,1,4,3,1,5,3,1;8 o7 f4 W4 D; [/ B, i: H
              1,2,3,1,2,5,1,2,4,1,2,3,2;9 ~. C8 s2 \, H, B8 S% q7 o
              1,2,7,1,2,2,1,2,5,1,2,4,1;, e; a* @9 f) I6 o9 @$ M6 ]
              5,2,3,3,5,2,1,2,3,1,2,3,6;
    , ?$ D% g) j8 n          1,2,3,1,2,2,1,6,5,1,2,6,4;
    ) ~: S1 j  A1 Z" V* \/ s1 Z7 c          5,2,3,4,4,2,1,2,3,1,2,5,6;
    8 j$ g5 D) X+ E' g( m  U. p* @& j) G8 {5 `          1,2,6,1,2,2,1,2,3,1,4,3,2;+ R+ ]: X7 ~7 [
              1,2,3,4,2,7,1,4,3,1,7,3,3;
    5 }7 g0 U$ K' N& y# F6 G          5,2,3,5,2,2,1,2,3,1,2,3,4;6 U# R% j, Q* t/ T8 a* S3 x
              4,2,5,1,2,2,6,2,3,7,1,6,4;]
    % initial guess of parameters
    , b9 k8 D( G+ ^% 初始化参数
    ' Y7 I3 [1 e5 {% ]. e/ sprior1 = normalise(rand(Q,1));" c7 H$ j, [6 W8 _8 S
    transmat1 = mk_stochastic(rand(Q,Q));4 ~- I: p! j  b$ p
    obsmat1 = mk_stochastic(rand(Q,O));
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%' ?. v7 l. c& U$ n* Q& p; c
    % 添加部分7 Y3 d$ Q7 p% @7 A6 T
        prior3 = normalise(rand(Q2,1));
    ! a; ?" W7 A/ p. x) r; ]' u, k& b    transmat3 = mk_stochastic(rand(Q2,Q2));1 _9 d( U# J/ P" V& e- Q; h
        obsmat3 = mk_stochastic(rand(Q2,O2));
    % f9 A3 Z6 H6 j- |; \: h4 X%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % improve guess of parameters using EM
    " E8 {( i  |3 |- b0 O2 f) m: J% 用data数据集训练参数矩阵形成新的HMM模型" f: g9 m6 V6 t! l6 \
    [LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));
    ! t' j( l$ p+ E  g3 A5 c% 训练后那行观察值与HMM匹配度
    " R% w+ l& R/ A# S+ P6 y" x3 ULL- D, P( `* l' S7 f/ G
    % 训练后的初始概率分布4 g5 O" F8 R& L9 x
    prior2; W6 T2 ~' a  a4 v/ m! {1 U+ r
    % 训练后的状态转移概率矩阵& _) ^( A/ \' B
    transmat2
    6 P+ j4 T! y+ L) q% 观察值概率矩阵
    3 u/ C' Q" `* U; Y8 ]) K: Q: hobsmat2
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    4 J" b" s7 [. \$ g; k% 添加部分: n% ^3 ?# J+ b6 C
        [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));0 V6 r, d# V  O
        LL2
    , H; t6 B7 s0 O+ R% q    prior4
    " e! z' M, _" S6 T    transmat4. G* M% P* t  v* F& R, M% g& h3 f
        obsmat4' S8 j; B" r- B6 b/ i) p
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % use model to compute log likelihood5 p% X2 W1 b0 W4 ]4 Q5 Z
    % data1=[1,2,3,1,2,2,1,2,3,1,2,3,1], I6 N$ k& f6 ~2 k1 R! Q
    data1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]0 ^$ ]+ x$ N' p0 o8 e6 `
    loglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)
    % `, ?& q' p, z, C$ z% \% log lik is slightly different than LL(end), since it is computed after the final M step
    ' x' l/ Z. A9 ]- _% loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
    % path为viterbi算法的结果,即最大概率path
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%! j/ V( x7 S0 ], L. j, @+ h
    % 添加部分/ q- i5 `: e& L6 ]) ?
    loglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)
    " E8 v2 u8 j& y& u%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    7 H: O' |0 A3 k1 H3 R8 W
    B = multinomial_prob(data1,obsmat2);
    0 h( o% v, y, _3 e$ npath = viterbi_path(prior2, transmat2, B)+ u) C! f' G# K" r8 D
    save('sa.mat');
    7 w$ T( \) {$ ~8 h& `+ c- M
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" a+ e; j5 c( l& Y6 R1 J! w
    % 添加部分
    ( O' V* ^$ H4 V& ?& K    B2 = multinomial_prob(data1,obsmat4);
    0 Z% f% W9 y# l8 C- W$ g. Z    path2 = viterbi_path(prior4, transmat4, B2)! D9 L; i+ V" ^2 J/ M
        save('sa2.mat');, \0 i0 C4 J, u+ I( t+ u  s
        if loglik2 > loglik 3 p/ Y  W, Y3 @% n0 `# l( e
            fuhe = 2* I: S" a8 k7 X. S/ [7 ?
        else% b' \2 x  x8 G! s
            fuhe = 1% |9 B6 F, ?2 |: w1 z
        end    4 k& G' c+ P: E% e# A
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ------
    运行结果
    ------
    data =
         1     2     3     1     2     2     4     2     3     1     2     7     2- T0 J5 j/ J9 d! ^
         1     2     3     6     2     2     1     4     3     1     5     3     1- L4 M2 @9 F9 q3 {6 T( N
         1     2     3     1     2     5     1     2     4     1     2     3     2
      k. j% f( t) {+ `( {5 F     1     2     7     1     2     2     1     2     5     1     2     4     15 Y0 S9 A! z# U2 N. D2 ~
         5     2     3     3     5     2     1     2     3     1     2     3     68 R7 z2 q; e7 d5 n  i4 @
         1     2     3     1     2     2     1     6     5     1     2     6     47 H7 E/ r9 |) [* I& ^& l8 H
         5     2     3     4     4     2     1     2     3     1     2     5     66 W5 _$ r+ S. G# ^; t
         1     2     6     1     2     2     1     2     3     1     4     3     2
    5 f7 P2 X' C9 \1 L  R0 `8 h+ [     1     2     3     4     2     7     1     4     3     1     7     3     3
    ! S3 d9 u$ r7 X) n     5     2     3     5     2     2     1     2     3     1     2     3     4
      g& W- S$ L! r. ^: B9 y" V+ a     5     2     4     1     2     2     5     2     3     7     1     6     2

    ; V' p* r- Z; K" X0 X6 @$ rdata2 =
         1     2     3     1     2     2     4     2     3     1     2     7     2: v: w$ r! ^) X  D9 R" p
         1     2     3     6     2     2     1     4     3     1     5     3     18 a* j: [2 b, U8 ~; ]0 D% q
         1     2     3     1     2     5     1     2     4     1     2     3     2
    - _. N6 a; ^, e$ v& s/ o     1     2     7     1     2     2     1     2     5     1     2     4     1
    % d( {' p5 y+ R& c' m! q$ o     5     2     3     3     5     2     1     2     3     1     2     3     63 ^' I) q! G2 z" ?# n' O, W0 B5 B
         1     2     3     1     2     2     1     6     5     1     2     6     4
    1 w' Q* ~2 n" C7 |6 N8 g     5     2     3     4     4     2     1     2     3     1     2     5     6
    , d) L7 O* K, X! z% ?; {* a     1     2     6     1     2     2     1     2     3     1     4     3     2
    " H: ]: a7 Z. F+ @7 D6 I     1     2     3     4     2     7     1     4     3     1     7     3     3' P9 D$ @1 C9 M
         5     2     3     5     2     2     1     2     3     1     2     3     4
    8 ?* E6 y8 |) D/ r+ I     4     2     5     1     2     2     6     2     3     7     1     6     4
    iteration 1, loglik = -327.100465/ N" ^" y* \% ~- A8 V; u2 {8 y: s
    iteration 2, loglik = -238.2598129 n. t8 y$ \0 T  y4 z
    iteration 3, loglik = -232.962948& ~/ z. r6 C  R7 z$ E; Q+ f
    iteration 4, loglik = -223.323891
    ; x. g& [" l2 h  witeration 5, loglik = -207.630875
    " i- U! T, B/ W6 f) uiteration 6, loglik = -191.012697
    8 v1 A4 t: f  K& X4 z2 Siteration 7, loglik = -178.611546; C! d3 `; e8 g6 f( ?
    iteration 8, loglik = -171.524132
    , w7 y5 ]$ R: ~8 a. n# v/ Kiteration 9, loglik = -168.626526
    ' g6 a( {2 N* X; @4 ^5 D# u  u) niteration 10, loglik = -167.387057
    ) S# [+ [+ s1 m" I, citeration 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
    ; A$ y# o' a. c! I! O% v% h. X
    prior2 =
        0.0000
    0 Q! r: Z( b7 Q$ }    0.0000+ P0 E7 Q: i- z! }' r
        1.0000. R( [6 X$ c9 J4 w& N
        0.0000. P5 A5 ]) q5 C9 g
        0.0000
    5 u7 |- K5 d2 F: M# F) j0 ?% _
    transmat2 =
        0.0138    0.0089    0.7680    0.1060    0.10334 T- K! W1 t, G& L; C9 A
        0.7811    0.0000    0.0199    0.0067    0.1923- {' g. r5 S& J2 m5 G1 ?
        0.0000    0.9936    0.0000    0.0064    0.00003 f! M' q, j$ d: E) H
        0.1686    0.2604    0.2242    0.3398    0.0070
      G6 \! c; U) W4 _4 x8 A( U1 L    0.0053    0.0406    0.8350    0.1184    0.0007

    1 E, O* T% M. O. Mobsmat2 =
        0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.0351
    0 X( D0 l7 ]( A) _) d* U    0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.0228
    2 E) k6 S, V! o: M+ E, A    0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.0000. n! G" W( i& }$ p# D
        0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.0055
    6 ~$ f$ s4 ^; u( q' W/ r* _, t% y  o    0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
    iteration 1, loglik = -277.738670
    ' A: Z( G9 A" @# I; Aiteration 2, loglik = -242.163247  y9 i: g4 E  T. A" ?
    iteration 3, loglik = -238.321971
    9 K2 G) X2 N1 {" giteration 4, loglik = -233.166746" F1 b: u; T+ [7 n( D
    iteration 5, loglik = -225.682259
    ) q& q4 g0 _' p% j7 H$ biteration 6, loglik = -214.560296
    9 e4 u. q+ G1 F/ H: Xiteration 7, loglik = -201.1820158 n5 Z$ K1 M" o& t! m/ I/ H
    iteration 8, loglik = -189.427453
    & _4 V; K4 x& K' ?- P" d- aiteration 9, loglik = -179.156352
    , j& i0 g8 L$ A& G( K5 Qiteration 10, loglik = -171.7440969 b8 n& Q& u+ @1 v& t. y
    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
    8 I* U0 y  x$ D" n$ H) U
    prior4 =
        0.0000% y3 b) d. I% o* Q
        0.9982% q0 j1 B& h/ @+ \" g
        0.00042 h( v, a) p% J
        0.0014
    , i8 ^! ^3 I' }3 q' u    0.0000
    5 t0 `" d( \: g9 m+ p3 y3 ^9 O' j
    transmat4 =
        0.0873    0.5277    0.2799    0.1007    0.0045) g6 E1 g* Z  Q
        0.0002    0.0000    0.0005    0.0000    0.9994
    1 g4 K2 S: `% M4 `% W* f1 |    0.0180    0.0000    0.0118    0.0011    0.9692
    # E- ?3 C* n2 f8 c; }. t    0.0436    0.0226    0.0810    0.0219    0.8310; F) c& U3 i- t% B# e! s+ m
        0.9746    0.0056    0.0003    0.0195    0.0000

    + k  M9 W8 h# |obsmat4 =
        0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.0770% H2 q* [1 g, p& c
        0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.0000
    ( w: P9 G4 h# h* v4 z    0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001# G  o9 ~- o4 p+ p4 s, A
        0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.0802, H, T; k0 Q3 U# F0 J8 [
        0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225

    8 _8 {) V$ |) ~2 B6 ddata1 =
         5     2     4     1     2     2     5     2     3     7     1     6     2

    $ ~$ f: a6 V6 C) Zloglik =
      -19.2351

    2 U1 h+ D- n; t6 Nloglik2 =
      -21.0715
    ; y+ E" }! c8 I. l! E$ {
    path =
         3     2     5     3     2     1     3     2     1     5     3     2     1

    ) o6 N7 ~/ G( Kpath2 =
         2     5     1     2     5     1     2     5     1     1     2     5     1

    1 v$ t; }0 z& j, nfuhe =
         1

    8 l' x" |+ T% m4 ?5 j( x  [$ Z4 D; k: o! }$ B$ b8 s- j+ r

    ' r) Z& g# A( s! O& I4 O# S

    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 09:37 , Processed in 0.436464 second(s), 55 queries .

    回顶部