QQ登录

只需要一步,快速开始

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

    4 {4 `/ a+ M& ]- M. P隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱- D2 g! f8 y5 N+ Y2 a
    % ①定义一个HMM并训练这个HMM。
    ' R0 X$ Y' ?. t7 ~$ A. L  c% ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。
    9 y$ e5 T& J( G, d& w+ U% 修改:旺齐齐* l5 R4 e& \4 ]" X+ _0 [/ q+ Y
    % 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。+ R7 l/ A0 a2 E$ D8 ]' c
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % O:观察状态数
    6 [  E4 f0 ^( A: d8 WO = 7;6 Q+ t  }: A+ C" ~
    O2 = 7;
    ) R3 O) D& Q% f. X! Z% Q:HMM状态数
    8 u& V/ b  b4 i3 DQ = 5;
    - X$ C$ H9 s# s. t( i, r% r  mQ2 = 5;
    1 S* n; E. ?/ P6 [. X& r# |%训练的数据集,每一行数据就是一组训练的观察值* S. Y! ]3 g3 [8 R1 K3 \
    data=[1,2,3,1,2,2,4,2,3,1,2,7,2;  G* T3 ^% b! O& N
          1,2,3,6,2,2,1,4,3,1,5,3,1;; a& @# K0 _: [0 T# m
          1,2,3,1,2,5,1,2,4,1,2,3,2;' U# m' [" n* r( V9 \3 x0 G
          1,2,7,1,2,2,1,2,5,1,2,4,1;& T. U( f# K4 y) b% l* }5 i% O
          5,2,3,3,5,2,1,2,3,1,2,3,6;
    + s3 x( w0 H) W5 |- P; v      1,2,3,1,2,2,1,6,5,1,2,6,4;" V' J* t& C5 j$ Z6 t
          5,2,3,4,4,2,1,2,3,1,2,5,6;
    1 j* ?! e& m0 |; P- i+ d      1,2,6,1,2,2,1,2,3,1,4,3,2;
    6 Z: V6 ^: L  J9 I( G- J      1,2,3,4,2,7,1,4,3,1,7,3,3;
    ' }- X* N* R! f5 H- C      5,2,3,5,2,2,1,2,3,1,2,3,4;
    / C; ?, ]9 V) b( y' w& p# e, C      5,2,4,1,2,2,5,2,3,7,1,6,2;]
    " _. g/ c6 i# A$ C
      data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;! h( I3 g: n: B
              1,2,3,6,2,2,1,4,3,1,5,3,1;
    . d; C# ~7 q8 [          1,2,3,1,2,5,1,2,4,1,2,3,2;6 v) Z) t9 c3 Z- e
              1,2,7,1,2,2,1,2,5,1,2,4,1;
    2 c$ X# ]$ m' t          5,2,3,3,5,2,1,2,3,1,2,3,6;8 g! Y6 m8 V8 ]
              1,2,3,1,2,2,1,6,5,1,2,6,4;' Y  e' q- K) C/ w1 e/ U
              5,2,3,4,4,2,1,2,3,1,2,5,6;  d" O6 S9 T# P9 Q9 n. a
              1,2,6,1,2,2,1,2,3,1,4,3,2;
    + `2 U# v" T; Q+ Y- ?' M0 T* @: h          1,2,3,4,2,7,1,4,3,1,7,3,3;) S' }8 x1 U0 Z% R7 [  ]; ]0 y
              5,2,3,5,2,2,1,2,3,1,2,3,4;
    + P* W& x2 {2 H! \& W/ [* T* I          4,2,5,1,2,2,6,2,3,7,1,6,4;]
    % initial guess of parameters8 A3 J, N* r3 r- c
    % 初始化参数5 w" {9 z: p6 {, D1 z% ]; v/ U
    prior1 = normalise(rand(Q,1));
    & u9 `$ q& f3 g0 v" T: s2 atransmat1 = mk_stochastic(rand(Q,Q));
    4 F; ]8 F, r) D! j. e, Bobsmat1 = mk_stochastic(rand(Q,O));
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    " k$ B! M- }8 m- `% 添加部分  G' y* u4 Y# C0 h% L
        prior3 = normalise(rand(Q2,1));
    : n# N# m0 i) t    transmat3 = mk_stochastic(rand(Q2,Q2));
    ; Y$ F3 F+ f9 J+ w    obsmat3 = mk_stochastic(rand(Q2,O2));0 Y8 ]5 P: U- a  I, Q9 a% N4 c7 x
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % improve guess of parameters using EM
    ' C# M3 z  C2 ]3 T5 N9 V% 用data数据集训练参数矩阵形成新的HMM模型
    ' X) L( z0 i& f3 y+ f[LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));
    7 H6 L! O; y/ o& n% 训练后那行观察值与HMM匹配度
    2 V7 o: C4 t5 d6 Z- O/ ]8 }LL% J5 e9 v! h* S# H1 P: B0 m
    % 训练后的初始概率分布5 a1 T5 v. N5 q" _2 ?& g- k
    prior2
    4 D7 M0 |& ^" w; Q) n5 H* t% k# @% 训练后的状态转移概率矩阵
    , l9 X7 B' ?) a( {. W' }* z3 ktransmat21 g; K3 v2 _9 n( B; R8 X
    % 观察值概率矩阵' i* M' |3 V! K6 y
    obsmat2
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % h$ m" D7 L2 s: A1 m: t/ `9 `% 添加部分: Y: C% I" r2 p
        [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));
    + _# O% [( L+ D# k* V9 h    LL2
    * ]: d9 ?4 `! p$ ?+ A4 d    prior4
    * z2 r  e2 z- u+ C4 e    transmat4$ M8 Q& L! a2 i3 M% o+ ~2 K
        obsmat4
      O" b3 W  s3 u%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % use model to compute log likelihood
    5 z% D% M3 A3 U! b: N4 o% data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]; o. y- ]+ E" K& ^# s$ v' B
    data1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]
    4 f8 o5 D+ W/ uloglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)
    5 p4 \7 c/ t8 X+ p6 V+ W% log lik is slightly different than LL(end), since it is computed after the final M step
    + d/ p* ~* i! m) T6 z% loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
    % path为viterbi算法的结果,即最大概率path
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%# f& V. k/ i7 H0 l5 k# `
    % 添加部分
    / H' E6 s: b9 Z, U  P8 _loglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)  I7 [' Q$ c+ n
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    + ?, a* m5 Q5 bB = multinomial_prob(data1,obsmat2);
    * o/ Y* f* a/ X# z5 G3 k% s) \" `path = viterbi_path(prior2, transmat2, B)- T% h! s: b$ f$ r4 l( ~8 ~7 X
    save('sa.mat');
    , |# J5 d) G# C) u
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5 Y) d/ r5 d  \3 |6 W; d
    % 添加部分
    " g6 T7 W# j' H- o. ~9 \: L    B2 = multinomial_prob(data1,obsmat4);
    " e5 a' n/ x4 g8 D4 W( o    path2 = viterbi_path(prior4, transmat4, B2)
    , ]: \# Z; t# @% r8 j. X    save('sa2.mat');
    8 E# v/ S( ~+ \" C. [( Z8 S    if loglik2 > loglik & p! W  S7 V$ S  O. a, b/ c
            fuhe = 2
    7 z! f% U! Z0 K; D2 R, \5 {6 A    else
    - K4 |# w0 @& h8 `8 u        fuhe = 1
    ! o) N% X, y. |/ `% A2 O7 w    end   
    / Z! s' W- c' |%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ------
    运行结果
    ------
    data =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    % }6 C/ p& W  [5 a* ^     1     2     3     6     2     2     1     4     3     1     5     3     1
    / j7 H% Z  ~6 F8 V) W! u  H2 ]     1     2     3     1     2     5     1     2     4     1     2     3     2
    5 R/ J1 m) s# O' ^( W% z" a+ ^     1     2     7     1     2     2     1     2     5     1     2     4     1" k* l* {. B: }  v$ `, w, p3 i: t
         5     2     3     3     5     2     1     2     3     1     2     3     6
      g. }8 x' A& O: l# k5 }, a- Y     1     2     3     1     2     2     1     6     5     1     2     6     4: z; P% t# F& e( ^% F- P- x
         5     2     3     4     4     2     1     2     3     1     2     5     6; s' V! Z+ k. e$ [
         1     2     6     1     2     2     1     2     3     1     4     3     2' j( S( J) z0 G. a9 H
         1     2     3     4     2     7     1     4     3     1     7     3     3
    3 M' {/ V7 H- h     5     2     3     5     2     2     1     2     3     1     2     3     4. u8 ]0 y7 @; l  |* A
         5     2     4     1     2     2     5     2     3     7     1     6     2
    . D: D5 U) ~; t1 O
    data2 =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    0 ^9 g0 t8 x5 e2 D6 u1 @     1     2     3     6     2     2     1     4     3     1     5     3     1+ s; ~1 e( e4 Z! O1 \2 O
         1     2     3     1     2     5     1     2     4     1     2     3     23 m) t2 k9 p) n" q( @
         1     2     7     1     2     2     1     2     5     1     2     4     1
    . b  `: }3 }0 H; S0 i3 [     5     2     3     3     5     2     1     2     3     1     2     3     6
    & |: z# e' Z! c# y0 b( z) W     1     2     3     1     2     2     1     6     5     1     2     6     4/ J* k1 {( k: p0 F! ]4 Q! H4 f
         5     2     3     4     4     2     1     2     3     1     2     5     6( {# ~- ~/ w+ k. _! L+ |  J
         1     2     6     1     2     2     1     2     3     1     4     3     29 D# K+ w% ~7 k6 x" G/ }& }: h
         1     2     3     4     2     7     1     4     3     1     7     3     3: R+ k7 c( K" d5 U4 _
         5     2     3     5     2     2     1     2     3     1     2     3     4
    . l9 g1 w# e9 z. L  ^0 ?     4     2     5     1     2     2     6     2     3     7     1     6     4
    iteration 1, loglik = -327.100465% ]0 @* W% G) U" {, j0 |/ P
    iteration 2, loglik = -238.259812
    5 U4 J7 d. c, q1 G+ q7 d, Niteration 3, loglik = -232.962948
    9 s( p1 W. D. i2 k5 l5 }: Viteration 4, loglik = -223.323891
    # A  S. H- p4 b+ }1 t8 O* Literation 5, loglik = -207.630875
    * k& r2 u9 f0 @iteration 6, loglik = -191.012697
    2 K! N! p' \- s, X& uiteration 7, loglik = -178.611546
    3 h  \6 i: s2 Biteration 8, loglik = -171.5241324 j, p/ P  e0 _. h5 J4 _$ v' P3 {
    iteration 9, loglik = -168.626526
    + z' o% M+ G7 P- w0 o$ z( U! x6 Riteration 10, loglik = -167.387057
    " ~# L; F: x4 ~4 u4 |# yiteration 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
    8 K8 o( s" d/ v* s9 X
    prior2 =
        0.0000- S- _4 }1 b' ~
        0.00001 t  K. h" L$ j% f. \7 n! s1 c/ O  Y
        1.0000
    * x5 y& a3 C! i0 d3 M+ z( ~# D4 _3 b9 I0 y    0.0000/ a9 I7 p9 d3 K: K5 ?, L
        0.0000
    4 h7 J' @. B7 d0 U: W9 s2 d& R) f
    transmat2 =
        0.0138    0.0089    0.7680    0.1060    0.1033
    3 g6 Q5 N1 O8 \$ D- F7 v; c    0.7811    0.0000    0.0199    0.0067    0.19230 l5 C7 t9 H9 x+ Y% P% T
        0.0000    0.9936    0.0000    0.0064    0.0000( U) N; K$ [+ ~
        0.1686    0.2604    0.2242    0.3398    0.0070$ [7 g: {& Y( S/ F
        0.0053    0.0406    0.8350    0.1184    0.0007
    ) M+ _% |! C: n. Z" D% r. b! J! i
    obsmat2 =
        0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.0351* w' f) J6 n6 O+ v6 q9 s' i
        0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.0228
    + K' }8 L6 N  W" K1 Q& s    0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.0000$ P2 a. m; ^; t2 C$ Y. n8 i- b! V
        0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.0055$ v  I" @9 x6 I2 ~/ l" W
        0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
    iteration 1, loglik = -277.738670
    " G* {8 }: Y( c- j$ o" Q; C/ B* Ziteration 2, loglik = -242.163247/ T1 w3 Y; l! H* O, `! I
    iteration 3, loglik = -238.3219717 f# |, F8 s0 S' J6 N1 Z' S
    iteration 4, loglik = -233.166746& P2 ~$ n. a- o0 u, w% ~
    iteration 5, loglik = -225.682259
    6 Z. g1 S+ V+ q- l5 riteration 6, loglik = -214.560296* l" v, Z0 v. ~( J) c
    iteration 7, loglik = -201.182015
    ; _3 F* c$ A5 d. b+ z' x" ^iteration 8, loglik = -189.427453: @: |  h3 ^# t7 S& z0 u
    iteration 9, loglik = -179.156352' m. u6 f$ f) ^3 y3 a, C2 ]  w
    iteration 10, loglik = -171.744096# x  W, w& U' @& i$ y- R
    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

    1 ]) C# N. t/ t5 e. fprior4 =
        0.0000' H% q7 o. R, ?6 s/ U
        0.9982
      E4 E* [" M; U, x7 c    0.0004
    8 [, r% Q" D! A# Q% o    0.0014
    9 M" f/ b* M4 J0 _  s% p    0.0000

    ) m& n# H4 T% g. Y, ltransmat4 =
        0.0873    0.5277    0.2799    0.1007    0.0045+ {- p: r' @% R' f6 O* U3 e
        0.0002    0.0000    0.0005    0.0000    0.9994, Y; J+ S" ?5 i
        0.0180    0.0000    0.0118    0.0011    0.9692
    1 r! O* A# q9 a7 r4 D1 q/ F    0.0436    0.0226    0.0810    0.0219    0.8310* J( x1 l: H  q/ u
        0.9746    0.0056    0.0003    0.0195    0.0000
    0 D' e: T! }2 F6 j7 ^
    obsmat4 =
        0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.07700 g# c% K( P/ L3 c! I* Y
        0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.0000
    ! r% F: p( B8 w/ h) L' m! C& j    0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001
    ; s/ [2 b* w" m( @8 ~# A4 U9 u    0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.0802! Z  H3 w. y+ m2 n6 \( H# T8 e0 q
        0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225

    # B! b" q1 E# f" U) ^9 Z1 Vdata1 =
         5     2     4     1     2     2     5     2     3     7     1     6     2
    ) T8 q/ E; N$ E- c
    loglik =
      -19.2351
    0 R2 x- a; J" i7 C# g
    loglik2 =
      -21.0715

    7 R9 X1 P6 E8 x* U6 r8 v% Z9 Mpath =
         3     2     5     3     2     1     3     2     1     5     3     2     1

    * b; H$ ?$ j3 d$ S5 s: w. lpath2 =
         2     5     1     2     5     1     2     5     1     1     2     5     1
    3 X6 ~  e: \; c2 g: w$ q$ K
    fuhe =
         1

    % }( _! p' u" d
    $ D7 U' }% `" B4 a$ X4 q/ J) n4 K$ a

    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-14 02:55 , Processed in 0.477176 second(s), 55 queries .

    回顶部