QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1808|回复: 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
    ( l! y( @) g# Y7 z3 o
    隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱) v: v. m! z; G/ H
    % ①定义一个HMM并训练这个HMM。
    + r2 q: @' |) O- k! c5 ^& V/ E% ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。' _& Q+ M& c2 V4 U
    % 修改:旺齐齐3 W7 C4 d) k# q$ M% l% v( d5 d
    % 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。
    0 @: v% ]7 t2 H8 R%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % O:观察状态数7 s, P1 J) y/ K7 @
    O = 7;
    9 m+ a0 m' V  h! D3 i  b' YO2 = 7;
    % R- T7 Q0 K; ~" X5 A) c8 W# Z/ R% Q:HMM状态数
    6 a1 w3 V8 E" Q9 F0 tQ = 5;
    0 T6 A9 R7 g$ Z' p$ X7 ]! Y2 N3 `, YQ2 = 5;
    ) S0 D- H# r3 T0 o9 m%训练的数据集,每一行数据就是一组训练的观察值/ T; G+ x4 v- l9 |& e
    data=[1,2,3,1,2,2,4,2,3,1,2,7,2;' t; e; {# b6 H" F
          1,2,3,6,2,2,1,4,3,1,5,3,1;
    6 q9 E2 Y0 N9 K1 X( B" C' P8 n      1,2,3,1,2,5,1,2,4,1,2,3,2;
    8 @. i: B  o# u, }6 g# A  Z      1,2,7,1,2,2,1,2,5,1,2,4,1;
    % o7 z; S& `/ Y; f- O' {9 b/ a      5,2,3,3,5,2,1,2,3,1,2,3,6;/ J3 A, Z& |2 P/ e5 E5 y0 E. I
          1,2,3,1,2,2,1,6,5,1,2,6,4;
    0 n' M3 x, U, @! ^: H6 z/ b6 \% r, D      5,2,3,4,4,2,1,2,3,1,2,5,6;# ~+ P; D2 H  H
          1,2,6,1,2,2,1,2,3,1,4,3,2;/ J! y2 A, i2 o* Z) p' W, _$ o
          1,2,3,4,2,7,1,4,3,1,7,3,3;* v+ x- F3 f  h, @; ]
          5,2,3,5,2,2,1,2,3,1,2,3,4;
    ) N4 B# x3 k' K" ~+ |      5,2,4,1,2,2,5,2,3,7,1,6,2;]
    ( M3 D  [: c  \# F! @
      data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;1 |" s" [( J. E* s4 N
              1,2,3,6,2,2,1,4,3,1,5,3,1;
    " o; x( `) X  x) N          1,2,3,1,2,5,1,2,4,1,2,3,2;
    ; g0 {0 M) @4 g* G3 h# M          1,2,7,1,2,2,1,2,5,1,2,4,1;
    ' P* |2 P! e' r, C7 T          5,2,3,3,5,2,1,2,3,1,2,3,6;
    2 T6 a. a8 P8 Q          1,2,3,1,2,2,1,6,5,1,2,6,4;  t( ~7 o, }  m* D9 s6 u
              5,2,3,4,4,2,1,2,3,1,2,5,6;
    $ ?6 T. D" [) Q" P          1,2,6,1,2,2,1,2,3,1,4,3,2;7 o9 d, q. ?$ k- J0 M
              1,2,3,4,2,7,1,4,3,1,7,3,3;) e+ l3 z8 b9 E
              5,2,3,5,2,2,1,2,3,1,2,3,4;
    : L4 k5 u) y9 C8 M  f" p; ?, o4 D" u          4,2,5,1,2,2,6,2,3,7,1,6,4;]
    % initial guess of parameters
    / C% |/ }* y; h3 g% 初始化参数
    9 _- B* m8 D7 M+ Qprior1 = normalise(rand(Q,1));! i; m9 a3 x8 \+ r$ m+ C: r1 |4 h
    transmat1 = mk_stochastic(rand(Q,Q));
    ) g  X/ h/ g* F0 N& |# Sobsmat1 = mk_stochastic(rand(Q,O));
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1 A$ j/ A% A: s( a) I% 添加部分
    * b5 T7 B6 o  c2 a- C' x' B    prior3 = normalise(rand(Q2,1));
    2 {1 L. t( R: B; l: W4 x8 N0 [    transmat3 = mk_stochastic(rand(Q2,Q2));1 L, c; u" ]! Y+ ~% Z6 t6 ?
        obsmat3 = mk_stochastic(rand(Q2,O2));1 y& w' }3 c7 ?- J
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % improve guess of parameters using EM
    ( p& S: n4 A, R/ f' g2 [' K5 {% 用data数据集训练参数矩阵形成新的HMM模型* |- X) M- J$ \& r, F
    [LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));! v, h% r3 w$ N1 M9 b+ y5 x, u
    % 训练后那行观察值与HMM匹配度* ~9 P0 Q: K% q, M: m# }
    LL) \: l) j( B: [- k
    % 训练后的初始概率分布
    ; k6 S$ }8 e" h: Jprior2/ t" f5 _9 j. i1 }! h+ ~* G
    % 训练后的状态转移概率矩阵
    : n5 x% F( Z  ]/ N# ptransmat2
    9 B: U( E, d: a) O. p% 观察值概率矩阵
    6 @# x; Z7 h% a+ zobsmat2
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%* _' Q" M% t& l  i2 P: U1 v% t  O( N
    % 添加部分# y5 q( |+ i" W1 I+ h
        [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));
    1 ]  r  ^9 Z( p8 u/ G6 I3 _/ i% \3 B    LL2
    & B, P  ~" Z4 t2 A5 g5 M: `    prior4
    9 f$ W* O$ I: M0 h    transmat4
    / T7 l  C/ I2 \% B+ I" y* D9 u    obsmat40 R# `% J0 s* D2 @5 \, C
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % use model to compute log likelihood; R6 a/ l. ?6 H5 E  |/ {
    % data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]
    2 E2 H8 B: R$ E; D6 X- H4 k! Kdata1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]
    : [1 _+ X) t2 \, h( r5 Hloglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)& V6 y. N3 |  ]6 q7 {5 S( J
    % log lik is slightly different than LL(end), since it is computed after the final M step
    , U7 }, a3 C! Z% loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
    % path为viterbi算法的结果,即最大概率path
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%: S& k, Q: V$ G# t1 {& o
    % 添加部分
    , L' H) i& |5 |/ uloglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)/ T, E* Z/ D( g( a
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    ) J% m" x, C. l% \5 ]: n0 O% cB = multinomial_prob(data1,obsmat2);9 _. L) @' f3 y. [, e+ R
    path = viterbi_path(prior2, transmat2, B)6 q1 A  j! M' K
    save('sa.mat');

    8 [9 H- B* n% A) d6 j& F! v5 f9 @%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    9 I# Z& d& i  t% g4 M1 b! {1 t0 E! E% 添加部分
    7 g9 K* Y; r2 z) Z/ L    B2 = multinomial_prob(data1,obsmat4);4 i! d" K( y- j1 S* ^, Q; s8 l
        path2 = viterbi_path(prior4, transmat4, B2)9 A* A. k/ R* D
        save('sa2.mat');$ W1 P1 T8 h7 r" E) z' k% T
        if loglik2 > loglik 7 }6 [0 N3 r& r" y
            fuhe = 29 l1 U7 h0 i0 o' S
        else
    % c+ [( L# i& {3 N8 J9 \9 H        fuhe = 1
    9 a' C( p6 L; F& }9 m    end    0 F( Q! ~8 `9 l9 t% G3 t
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ------
    运行结果
    ------
    data =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    , C0 D9 g3 ?* s  p3 @/ Y     1     2     3     6     2     2     1     4     3     1     5     3     1$ a" j* [  m+ c" b7 I4 b0 ~
         1     2     3     1     2     5     1     2     4     1     2     3     20 n# h! g+ |3 |' t4 |
         1     2     7     1     2     2     1     2     5     1     2     4     1
    4 ^' z/ k% `8 L" f' T5 Q     5     2     3     3     5     2     1     2     3     1     2     3     6
    ' g0 X4 z: N' M+ T- c0 o     1     2     3     1     2     2     1     6     5     1     2     6     4
    1 N5 l; R. o/ [0 {3 A     5     2     3     4     4     2     1     2     3     1     2     5     6
    ; e/ [9 @3 f% j* `% j* }/ {' E  j     1     2     6     1     2     2     1     2     3     1     4     3     20 J2 g1 Z8 ?' G* a0 J& K3 @  L( {5 y
         1     2     3     4     2     7     1     4     3     1     7     3     3
    5 e% j* ^8 G3 ?1 ^7 I: X0 {: ?     5     2     3     5     2     2     1     2     3     1     2     3     46 q1 T' T1 h0 m, u- u8 _3 x( S: t
         5     2     4     1     2     2     5     2     3     7     1     6     2

    0 y0 f5 E9 p  K$ I4 g' ~6 \data2 =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    3 z+ e; b" G: B2 v     1     2     3     6     2     2     1     4     3     1     5     3     1" d% Z0 E- N3 ?4 e0 q* X
         1     2     3     1     2     5     1     2     4     1     2     3     2* o0 Y% i6 G; S
         1     2     7     1     2     2     1     2     5     1     2     4     1
    0 ~' h! G/ w7 a) \6 D/ k     5     2     3     3     5     2     1     2     3     1     2     3     6, C' z4 P4 R( G4 J
         1     2     3     1     2     2     1     6     5     1     2     6     4& l) c- r- o8 i% D; d: ?
         5     2     3     4     4     2     1     2     3     1     2     5     67 F; m7 j" n4 e+ \
         1     2     6     1     2     2     1     2     3     1     4     3     2# r6 g  l8 ~0 `; o# I7 K# E
         1     2     3     4     2     7     1     4     3     1     7     3     3
    0 f2 N1 b- r: f, \, k5 m5 @     5     2     3     5     2     2     1     2     3     1     2     3     4
    : u( i2 O7 B8 l  O5 A     4     2     5     1     2     2     6     2     3     7     1     6     4
    iteration 1, loglik = -327.1004654 [  c( H" Q. _5 F1 H
    iteration 2, loglik = -238.259812
    / g) e  h' T* U% P, o$ h$ ^' i  ^iteration 3, loglik = -232.962948
    # l8 ~/ Q/ W( Eiteration 4, loglik = -223.323891
    2 H, ^3 W  o+ m6 ]1 Z9 qiteration 5, loglik = -207.6308758 B. ]# r" H. E+ e, e! X' K* f
    iteration 6, loglik = -191.0126978 a% A) e0 @2 o
    iteration 7, loglik = -178.611546
    " p0 x; E8 j; L$ o3 Qiteration 8, loglik = -171.524132
    2 I. e, S! i) \' T8 N0 biteration 9, loglik = -168.6265268 \+ {. X, z5 _$ Y3 q( n. I% j
    iteration 10, loglik = -167.387057  R6 H4 x9 V8 P# V
    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

    2 p: ~, Q4 J4 N9 {prior2 =
        0.0000  t/ g. ]$ h' T7 e
        0.00004 I! {9 W& b5 u9 `
        1.0000
    3 ]& ?# y( e& W    0.0000
    5 C& E" |9 L1 h: X    0.0000
    & ]6 D# q6 `; F, @) m
    transmat2 =
        0.0138    0.0089    0.7680    0.1060    0.10338 s  v. @. k8 ?3 w, f; E+ P" n" b2 d- h
        0.7811    0.0000    0.0199    0.0067    0.1923
    6 y% K8 S5 E! I1 E1 M    0.0000    0.9936    0.0000    0.0064    0.0000
    + Z, ^% v  Y+ e+ e7 p; S    0.1686    0.2604    0.2242    0.3398    0.0070
    ( m- u' j7 t3 ?1 T    0.0053    0.0406    0.8350    0.1184    0.0007

    2 m6 }' b5 }/ m- L* u/ ]; P% V+ }obsmat2 =
        0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.0351
    % _) w0 T8 J3 S( m# E# ^    0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.0228
    $ }+ X: n- d% f$ b    0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.0000# b1 A$ W: z" z9 n2 X
        0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.0055
    , `! B+ x0 A  `1 X, N    0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
    iteration 1, loglik = -277.7386703 q- O, ^" Z: v$ K
    iteration 2, loglik = -242.163247, u$ v; ]& J, L9 c) M8 b
    iteration 3, loglik = -238.321971) O8 x% J+ P5 t  g. a
    iteration 4, loglik = -233.166746  f' f$ P4 s4 O
    iteration 5, loglik = -225.682259; x! R; T; V8 v
    iteration 6, loglik = -214.560296: e# E. J3 p7 h2 c5 k# s& F5 f
    iteration 7, loglik = -201.182015( ?4 {! L9 i9 q
    iteration 8, loglik = -189.427453
    ( p0 E6 Y- f# G* J9 M4 A$ m: D" jiteration 9, loglik = -179.156352
    " b+ o* u: `# [& `. W" r5 L) kiteration 10, loglik = -171.744096  W$ }: o$ V# t  t! N# E/ g
    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

    . A, z& `8 h- T9 N% R7 `prior4 =
        0.0000+ O: i1 s' ?" \0 g) i! W+ c
        0.9982
    6 P- c% X. L) I+ M+ V    0.0004
    4 A9 U3 s6 e: C1 d+ J+ ]    0.0014
    : i! ]4 c) T: A: g    0.0000

    & {  q. [7 {1 B, s( Rtransmat4 =
        0.0873    0.5277    0.2799    0.1007    0.0045
    % t/ T' t5 Z" l; @6 Y  z! ?* {    0.0002    0.0000    0.0005    0.0000    0.9994
    . Z, U# R; A, f    0.0180    0.0000    0.0118    0.0011    0.9692
    " C( ?' b2 c6 I$ Q) }* |2 X    0.0436    0.0226    0.0810    0.0219    0.83109 f5 u& n) A! E1 L, y/ S
        0.9746    0.0056    0.0003    0.0195    0.0000
    4 h! s( x' N1 _) G0 F
    obsmat4 =
        0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.0770
    6 ~/ k4 P( m& M, f$ y    0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.0000
    6 g% O( k  _$ N; A6 ^1 h    0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001
      B) X' m* J" W, J1 }  F! ]    0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.0802& g& X2 e% a* c2 q& Z6 j
        0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225
    7 T) ~1 U: a% {8 h$ [  ~; M
    data1 =
         5     2     4     1     2     2     5     2     3     7     1     6     2
    ( w. ]. P* g# v
    loglik =
      -19.2351

    " M6 r) E- j2 H% j' lloglik2 =
      -21.0715
    , B" o, S* Z1 ~2 P4 G1 W6 r6 j
    path =
         3     2     5     3     2     1     3     2     1     5     3     2     1

    7 [0 o9 v" m! C2 A8 {4 _4 W' gpath2 =
         2     5     1     2     5     1     2     5     1     1     2     5     1

    5 o4 B: K2 h7 k1 ?$ Xfuhe =
         1

    - F( z5 {1 i: u& ?
    ; M+ E1 [7 u% c: ~( H8 g' A, W5 j' u: u$ Z' j" _, Z

    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-9-8 16:44 , Processed in 0.355719 second(s), 55 queries .

    回顶部