QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1778|回复: 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
    - H( Z- d' @' d3 T
    隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱) D  U4 D) X- Q" C3 J
    % ①定义一个HMM并训练这个HMM。% F/ c% G$ }+ r1 v7 t6 x' y7 m" R" w
    % ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。
    6 ]" J! V/ d* J. k7 J5 p. I% 修改:旺齐齐/ S* s7 s0 n9 k7 A+ e, k" q
    % 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。
    # h. N# v: ]  C" f! G* b9 M8 z  A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % O:观察状态数7 P# t/ Y' Z3 S
    O = 7;+ G- K' E; C" o$ l
    O2 = 7;/ Y( ]1 ], D4 X* H9 [
    % Q:HMM状态数
    ; i2 M: e7 M8 m3 C  u% KQ = 5;
    % I! r% P- _# o+ ~/ C0 ]& n3 hQ2 = 5;& ~$ f7 v4 D" t6 \4 `3 z' j) b
    %训练的数据集,每一行数据就是一组训练的观察值
    8 _( J1 y! `" _. m0 d; N% Fdata=[1,2,3,1,2,2,4,2,3,1,2,7,2;8 Q6 [( J5 q8 d$ c* S1 `' l
          1,2,3,6,2,2,1,4,3,1,5,3,1;$ ^  `& B/ q3 j0 \5 h
          1,2,3,1,2,5,1,2,4,1,2,3,2;4 Z/ ^- y( X: V8 O0 V
          1,2,7,1,2,2,1,2,5,1,2,4,1;
    ) i& h$ p% l% O      5,2,3,3,5,2,1,2,3,1,2,3,6;) d% j2 q+ P  z9 H
          1,2,3,1,2,2,1,6,5,1,2,6,4;
    / x& ~5 v) p9 N      5,2,3,4,4,2,1,2,3,1,2,5,6;
    8 U, ?* a- l6 L/ j- m      1,2,6,1,2,2,1,2,3,1,4,3,2;
    % P8 x  u% x4 {% d      1,2,3,4,2,7,1,4,3,1,7,3,3;
    4 e/ H% L$ L2 o) x9 N; ^' Y. D! J# i      5,2,3,5,2,2,1,2,3,1,2,3,4;
    - a6 ^8 j% f) g      5,2,4,1,2,2,5,2,3,7,1,6,2;]
    ( F' S) m7 X  t) ^  r6 v' i+ K9 M; V
      data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;
    2 ~0 g, g8 n: X7 E- b3 ^          1,2,3,6,2,2,1,4,3,1,5,3,1;$ ^# T2 E6 R0 v  ]
              1,2,3,1,2,5,1,2,4,1,2,3,2;1 e8 {/ n1 K2 Y1 V
              1,2,7,1,2,2,1,2,5,1,2,4,1;
    . L( D4 s" w" Y, P6 |          5,2,3,3,5,2,1,2,3,1,2,3,6;
    8 b0 ]6 _! S6 j+ e$ l          1,2,3,1,2,2,1,6,5,1,2,6,4;
    - `7 R: p6 E1 }. m1 q          5,2,3,4,4,2,1,2,3,1,2,5,6;7 T9 Y8 F; U1 H9 N$ Q: }
              1,2,6,1,2,2,1,2,3,1,4,3,2;
    0 g5 S  \# ]! P, \; `          1,2,3,4,2,7,1,4,3,1,7,3,3;) @# H  T/ e( O! b' q. K
              5,2,3,5,2,2,1,2,3,1,2,3,4;
    " k+ a% G( X0 l: Y1 _; T3 A          4,2,5,1,2,2,6,2,3,7,1,6,4;]
    % initial guess of parameters
    * J8 L2 w1 E+ \( A1 D2 q4 ?% 初始化参数
    * Y5 u1 Y: t/ f3 E4 g: L# Rprior1 = normalise(rand(Q,1));2 B& ~3 l8 S9 D  `8 ~5 c3 D
    transmat1 = mk_stochastic(rand(Q,Q));
    8 s1 Z: {- G& d) N/ Jobsmat1 = mk_stochastic(rand(Q,O));
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    # f  g0 p! P. D7 g* Y0 x$ @% 添加部分
    * b. M0 F# x0 U- @  t' y8 M    prior3 = normalise(rand(Q2,1));3 E/ B# I0 A- c3 y, V2 P+ J$ y% F: g/ {
        transmat3 = mk_stochastic(rand(Q2,Q2));  j7 o$ }) b' }' d) n" R3 }. E( _
        obsmat3 = mk_stochastic(rand(Q2,O2));, m' |0 [, B& |4 g+ p
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % improve guess of parameters using EM
    0 P* x1 b9 y1 T" s# V1 @0 I% 用data数据集训练参数矩阵形成新的HMM模型0 k) M# W, F% k# |; O" D3 g8 b
    [LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));
    ! W, `  g! F; o( x8 S% 训练后那行观察值与HMM匹配度1 A8 o7 i/ a# F: T+ J9 f4 X/ g
    LL
    + e( Z, v" M* A& D" p6 ]% 训练后的初始概率分布
    ( h3 [: h$ h& [0 L& q' f4 Q* Nprior2" p% J# i* A0 b; |9 q3 c: k* Y
    % 训练后的状态转移概率矩阵
    # `: @) v3 ^4 k$ W. b+ Z6 ]. Ftransmat2
    2 g7 r' w0 Q5 N% 观察值概率矩阵9 }8 C" o7 ^: N! `  T8 @
    obsmat2
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    / ?- h% z. X( m  ~; {1 v. F4 z% 添加部分% {+ g& @% C1 W9 @
        [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));- ^) j1 W0 q7 L3 J
        LL2
    & w! M1 k; E8 M3 F; _    prior4
    8 l# o% @; Y6 o, v! |    transmat4
    ! k% t8 G5 R( t8 S& f- D# J, l1 i    obsmat47 B7 x' t! @: ]7 v8 s3 x
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % use model to compute log likelihood
    - z" \: H4 r1 p5 m% data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]
    : R; X- K3 i1 n6 t4 Idata1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]
    # e3 U( r6 g+ T* S% ?$ @( `: C4 floglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)  @4 ?: K9 A* O7 ~# S" F7 N
    % log lik is slightly different than LL(end), since it is computed after the final M step7 E) Z% r- q& V- Z
    % loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
    % path为viterbi算法的结果,即最大概率path
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%* A' [6 E& |1 L9 U
    % 添加部分6 H+ Z4 e" ^  A9 G% B$ C$ n
    loglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)
    3 P* V7 ]+ ]+ G9 X, A( J; Z%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    / K4 q, M% r2 c9 X( }! F1 U. gB = multinomial_prob(data1,obsmat2);6 g" J. D" G  e. I% U
    path = viterbi_path(prior2, transmat2, B)
    # p( P" C7 Z, H4 L/ M9 msave('sa.mat');
    ( V: U9 ^. p9 q
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    2 a4 u8 V, y$ m3 w% l% 添加部分
    7 C7 m, l& q# }/ l; N    B2 = multinomial_prob(data1,obsmat4);# C$ K0 c! f& }
        path2 = viterbi_path(prior4, transmat4, B2)2 C  c5 l6 t5 n# o4 o0 u+ R+ }
        save('sa2.mat');. s5 U/ L6 G0 F) @( \* M( n! i
        if loglik2 > loglik
    % Z6 _1 z- e+ @7 B0 B/ N- \        fuhe = 27 q  M5 X& R1 U1 g
        else
    ! _  V/ k! m! }5 |        fuhe = 1
    + \6 U2 E9 F3 y! S! O7 B    end    ' }, [) S; m; M) Q! t
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ------
    运行结果
    ------
    data =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    0 F9 \! G! g% |6 S' m9 n2 X     1     2     3     6     2     2     1     4     3     1     5     3     1
    * v4 {# Z3 [! n( Y5 U     1     2     3     1     2     5     1     2     4     1     2     3     2" |5 m3 [9 [# ?8 `" @9 Z0 O
         1     2     7     1     2     2     1     2     5     1     2     4     19 ]7 O. p8 U9 [( G8 w
         5     2     3     3     5     2     1     2     3     1     2     3     6
    . i$ o0 J4 g+ I7 m     1     2     3     1     2     2     1     6     5     1     2     6     4* k7 x& h/ E1 D8 y
         5     2     3     4     4     2     1     2     3     1     2     5     6
    $ H3 o6 F: x+ i     1     2     6     1     2     2     1     2     3     1     4     3     2
    ! T- j; E$ h! O     1     2     3     4     2     7     1     4     3     1     7     3     3
    # J, B* Y; c+ ]7 z7 }$ U5 W5 g     5     2     3     5     2     2     1     2     3     1     2     3     4
    4 K" Q/ R- |/ L8 [) @" Y1 s     5     2     4     1     2     2     5     2     3     7     1     6     2
    # P  |* p5 e$ }! B
    data2 =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    ( R9 G% i) S1 d/ I     1     2     3     6     2     2     1     4     3     1     5     3     1
    6 ?3 Y0 S! X- \5 p* M9 n     1     2     3     1     2     5     1     2     4     1     2     3     2% ^) v" I5 E* n- U1 M! E' Z
         1     2     7     1     2     2     1     2     5     1     2     4     1
    ( y) d& d4 l  }9 N! Z9 r8 C6 }     5     2     3     3     5     2     1     2     3     1     2     3     6
    # \7 D! m# o( g* q7 t     1     2     3     1     2     2     1     6     5     1     2     6     4) h* h: l) I  A  M' V$ s
         5     2     3     4     4     2     1     2     3     1     2     5     6
    5 D* c  F  ?6 w; P1 F     1     2     6     1     2     2     1     2     3     1     4     3     22 K$ B4 `0 R/ F+ O
         1     2     3     4     2     7     1     4     3     1     7     3     39 W* s% ~) O# P5 O7 F; p) P
         5     2     3     5     2     2     1     2     3     1     2     3     4% J/ n# H- m8 K1 C- h; w* C- r
         4     2     5     1     2     2     6     2     3     7     1     6     4
    iteration 1, loglik = -327.100465
    2 E8 r# m% m' z0 k) oiteration 2, loglik = -238.259812
    " \0 X6 ]: j" @; \0 giteration 3, loglik = -232.962948
    3 Q+ G' X. |' K9 h- U  Z% G+ P: V; W+ citeration 4, loglik = -223.323891# Q* P) t% h* \- G2 |# a
    iteration 5, loglik = -207.630875
    4 e8 s$ G/ ^9 y. x( o! z8 qiteration 6, loglik = -191.012697
    8 V5 m* r7 e1 Oiteration 7, loglik = -178.611546
    / h+ k7 U4 H! v0 k0 Witeration 8, loglik = -171.524132
    8 X7 @, o4 Y# F& a9 H$ K8 G" Witeration 9, loglik = -168.626526
    ( I' s7 t# U, W  \, a/ Literation 10, loglik = -167.387057
    , R6 [) @. Y8 [+ p0 e3 {/ jiteration 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
    - d: r9 s0 b; q) R6 \; O
    prior2 =
        0.0000! l0 U: i1 u# h- r& l  h2 z( I
        0.0000" s5 `' P) [1 t  w6 e( t. A0 I
        1.0000& d1 ^) J) i, L, e/ t( Y
        0.0000
    ( ?% W9 S1 e5 w' h# N" U3 L% u4 `/ v0 @    0.0000
    6 i6 R' l, f" [2 ~1 `
    transmat2 =
        0.0138    0.0089    0.7680    0.1060    0.1033
    5 X% H% j0 C. `! l, I    0.7811    0.0000    0.0199    0.0067    0.19233 ?! ]7 K7 q- I4 Q8 [/ F6 W% o7 _
        0.0000    0.9936    0.0000    0.0064    0.00002 g* b/ {3 R* Z3 k' j4 I  X7 O
        0.1686    0.2604    0.2242    0.3398    0.0070* b1 A4 L4 y9 a- T% d- a- D
        0.0053    0.0406    0.8350    0.1184    0.0007

    % M, H! S: ?* Sobsmat2 =
        0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.0351
    0 j+ p: p  j4 P$ _# b& C    0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.0228
    ) ~# S8 ]* R8 s5 B  ~+ u    0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.00002 K- L- ~1 u& ~% z4 ]& y+ O
        0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.00559 i8 E4 R. R/ Q6 H7 }
        0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
    iteration 1, loglik = -277.7386707 k* \7 f* k8 S  V
    iteration 2, loglik = -242.163247
    ! p) O* S% Q9 S6 D- I0 riteration 3, loglik = -238.321971! P+ U) u( ?$ g, u  Y
    iteration 4, loglik = -233.166746
    5 Y( n0 a7 w3 y3 Y9 ^; giteration 5, loglik = -225.682259& G7 p9 p) |1 y9 w7 M
    iteration 6, loglik = -214.560296( E3 u7 f& Q* n# E) s
    iteration 7, loglik = -201.182015( B0 J* x: x+ a7 v8 a
    iteration 8, loglik = -189.427453
    7 l9 o' R/ p% K1 u* j* xiteration 9, loglik = -179.156352
    ( d8 _4 D2 r' v1 ?: citeration 10, loglik = -171.7440967 i$ I) C' t& {1 e
    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
    : j' q( a  F/ A' Q0 k5 U# V
    prior4 =
        0.0000, v! Q! [1 h, O8 n! S/ V
        0.9982% F5 V* V0 i& T0 l
        0.00049 {6 T9 |) S! j) b2 L
        0.0014
    + R, W5 J* ?/ q: |4 T    0.0000
    6 W' b/ j0 @% ?% T6 X& X; x1 e
    transmat4 =
        0.0873    0.5277    0.2799    0.1007    0.0045
    2 ]' L1 }5 ^$ s5 j# b7 ]    0.0002    0.0000    0.0005    0.0000    0.9994
    7 Z# {# r( j% A/ u  x1 A& W' K    0.0180    0.0000    0.0118    0.0011    0.9692
      }. m& Q$ P3 |- d3 l    0.0436    0.0226    0.0810    0.0219    0.8310* k) W6 L4 D0 w+ u% `! u
        0.9746    0.0056    0.0003    0.0195    0.0000
    & u" `- u! ?9 _8 C$ o0 O
    obsmat4 =
        0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.0770
    ) g4 V9 p8 z& o6 d    0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.0000
    3 @8 P8 l9 X4 b    0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001
    . t4 m$ q) Z6 c9 E, u  c" f7 P    0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.0802
    2 Q! w+ G6 {8 W& R! e# U    0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225
    - l3 Y( w7 Y) k) u
    data1 =
         5     2     4     1     2     2     5     2     3     7     1     6     2

    0 I' K5 |3 S0 a) `/ I- Lloglik =
      -19.2351
    - f$ x  d: G4 z2 Z" W! {- F4 m
    loglik2 =
      -21.0715

    9 @8 u2 }6 o% F, X; opath =
         3     2     5     3     2     1     3     2     1     5     3     2     1

    3 i8 K% b3 Y; s* d( Opath2 =
         2     5     1     2     5     1     2     5     1     1     2     5     1

    - m4 y& G" m3 Y. ?8 g' P) p  ]! [: Hfuhe =
         1

    + f+ E( v- g/ a
    $ f0 Y8 N3 o* _( R: q, z) F: y6 q7 y5 S' z2 |' N8 ^2 D

    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-25 05:07 , Processed in 5.485816 second(s), 54 queries .

    回顶部