QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1544|回复: 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 m# P* G3 Z3 T3 b1 E
    隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱5 f2 [+ I+ s! k. H! G
    % ①定义一个HMM并训练这个HMM。
    ' d. A# ^$ U  A6 A6 x+ E+ Z* {/ n& R% ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。2 m- Y, c- D) @: n
    % 修改:旺齐齐
    - s; K$ \6 g3 N9 v! P# _  [7 {% 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。
    7 m! W6 }( V1 W6 ]7 P%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % O:观察状态数7 ~6 F+ e) L3 L. {$ M
    O = 7;
    , J7 X1 y9 A8 v% H% |0 l$ O1 KO2 = 7;- S7 m1 ]/ X- S: _  Y) A) ^
    % Q:HMM状态数7 O, s$ ^+ W3 H3 _' |$ P
    Q = 5;
    / p4 {. D: D+ T3 A" g. f( gQ2 = 5;. w) c( A9 _/ R4 L) H0 b, L, @, @3 w
    %训练的数据集,每一行数据就是一组训练的观察值2 G& J7 ~! S! S2 b; w7 F
    data=[1,2,3,1,2,2,4,2,3,1,2,7,2;
    $ p+ m# p/ T- l5 ^      1,2,3,6,2,2,1,4,3,1,5,3,1;
    % w& p0 n: B) G! E5 p% }# k6 `( i/ O      1,2,3,1,2,5,1,2,4,1,2,3,2;( ^" ^* v/ _" b
          1,2,7,1,2,2,1,2,5,1,2,4,1;- ]8 k  V: O9 m% N
          5,2,3,3,5,2,1,2,3,1,2,3,6;
      i& A$ y, J% \; u      1,2,3,1,2,2,1,6,5,1,2,6,4;
    " M& u! p$ n' N- i- E; O      5,2,3,4,4,2,1,2,3,1,2,5,6;
    " W7 k- j* x' a. v7 q! h      1,2,6,1,2,2,1,2,3,1,4,3,2;
      }1 i' \! P4 `# M# Y      1,2,3,4,2,7,1,4,3,1,7,3,3;, u  l5 x: [. \6 g1 O7 L. {! V
          5,2,3,5,2,2,1,2,3,1,2,3,4;
    ( z: ^8 z$ i7 R2 T8 H+ }: _6 ?      5,2,4,1,2,2,5,2,3,7,1,6,2;]

    + G. U- S# h  l$ @  data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;
    , O4 O( O5 v" i% z5 ], k& h" N          1,2,3,6,2,2,1,4,3,1,5,3,1;
    ' `; Y. z5 R" s, a2 A          1,2,3,1,2,5,1,2,4,1,2,3,2;7 X- p. y* Y3 |( l
              1,2,7,1,2,2,1,2,5,1,2,4,1;
    ! [: K) t/ e) S* _          5,2,3,3,5,2,1,2,3,1,2,3,6;6 L3 B0 F& y9 K. l, a! ^8 s* H. Q
              1,2,3,1,2,2,1,6,5,1,2,6,4;7 E6 ]1 {' K- M. _
              5,2,3,4,4,2,1,2,3,1,2,5,6;
    3 S/ Z# b) L8 X; k          1,2,6,1,2,2,1,2,3,1,4,3,2;
    3 h0 S7 ~7 a& i: b9 k6 ~          1,2,3,4,2,7,1,4,3,1,7,3,3;
    $ h1 _4 a+ W" @& U5 C) z          5,2,3,5,2,2,1,2,3,1,2,3,4;
    ; B1 v: H: x3 E          4,2,5,1,2,2,6,2,3,7,1,6,4;]
    % initial guess of parameters
    7 q$ p0 P+ _7 j) {) J$ B% 初始化参数
    % A4 m8 z5 F5 i+ O( o) @* Q# Jprior1 = normalise(rand(Q,1));
    , p/ I6 ?4 m$ Y: w: ]transmat1 = mk_stochastic(rand(Q,Q));
    ( v3 a# @4 ?# i4 tobsmat1 = mk_stochastic(rand(Q,O));
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ' Y% ]2 @2 j, j2 t( _. a* G4 v% 添加部分7 c. I4 m, @: r. l" c2 c* @
        prior3 = normalise(rand(Q2,1));8 f% _2 [+ l  _( g7 @. u6 @
        transmat3 = mk_stochastic(rand(Q2,Q2));/ W/ ], M* c0 `% ]* h" y* L
        obsmat3 = mk_stochastic(rand(Q2,O2));/ o9 |. L: [  M
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % improve guess of parameters using EM$ }( l, f" H3 e7 V* a1 I2 G
    % 用data数据集训练参数矩阵形成新的HMM模型; j, U! G3 Q/ P" f5 P! E
    [LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));- p# s  J+ `: l) ]7 k& g9 e* n+ }
    % 训练后那行观察值与HMM匹配度
    0 `7 I+ w+ L* n: Q* J% a" {LL$ c. Y! U  X$ m/ C2 N
    % 训练后的初始概率分布
      e; A5 |7 ~, a1 C' d0 {: Pprior2
    / m! B4 e. w+ I% 训练后的状态转移概率矩阵
    9 V% f7 g: |! T! W  }7 j7 n! Ctransmat2
    % E# e5 H7 A, k% T2 o% 观察值概率矩阵
    1 k4 }( q- c5 e' Q' iobsmat2
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    4 l! ^2 ^  d; b! S% 添加部分' [3 t# k/ C! r5 L: K) S8 C& o
        [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));: ?9 q3 O# R2 ^) C2 h
        LL2
    ( y  N* x5 Z2 ]8 Z( B* r  p3 R: t    prior4
    , q% |! e! m3 D' ]1 t! m* T2 t    transmat4
    2 j1 G) R' p: l6 v2 [/ M2 b7 t    obsmat4! h# a1 ?& |7 ~: E# H
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % use model to compute log likelihood  z. `: X2 z- _# N1 N+ o4 i
    % data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]2 @4 B7 o( x1 n' {* ~: x
    data1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]- I5 k2 g+ M, T! \/ z3 L
    loglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)
    8 q) s; W7 |, \) N* C% log lik is slightly different than LL(end), since it is computed after the final M step1 @7 l7 z* Y, K5 P9 E# P# f
    % loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
    % path为viterbi算法的结果,即最大概率path
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%: v8 _' v, b/ H: n+ }6 V
    % 添加部分
    " q8 ]3 k: O% K% x- E4 Yloglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4). Q: ^' f, c) W5 g( m
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    # a/ a( i: t, d5 V  kB = multinomial_prob(data1,obsmat2);
    ! m4 H6 N! l: {: P$ z. Spath = viterbi_path(prior2, transmat2, B)
    - h: }9 \  X+ C! D3 O1 N6 ~save('sa.mat');

    & [, l% n: u8 e  M%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%& C& T% l  H* ]& r$ {0 U$ f! S/ A0 `  |
    % 添加部分
    . d. ^: s, w) g    B2 = multinomial_prob(data1,obsmat4);3 |; H& i0 c* `9 i6 h
        path2 = viterbi_path(prior4, transmat4, B2)
    ! `- |' I* {' y9 v    save('sa2.mat');
    # `4 I1 C2 S2 x5 f7 O4 m* y    if loglik2 > loglik ( l2 C, k/ S# g- e/ h2 g: U
            fuhe = 2
    . y; F, B8 _$ e1 h3 r1 J5 X8 r    else5 O+ k  K1 M, i' X! \3 m5 o5 R' R
            fuhe = 13 \" w1 B8 Q0 @# a9 a! \. B
        end    / n4 b2 R) ^. t, D+ B5 ~
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ------
    运行结果
    ------
    data =
         1     2     3     1     2     2     4     2     3     1     2     7     2. c- P" ^% @0 t
         1     2     3     6     2     2     1     4     3     1     5     3     13 ?- @+ j: h9 T- \3 _0 j  `
         1     2     3     1     2     5     1     2     4     1     2     3     2, M# m% b! N2 P6 }& B! w
         1     2     7     1     2     2     1     2     5     1     2     4     1
    ) o5 G0 E6 q( m1 \7 d) J, _     5     2     3     3     5     2     1     2     3     1     2     3     6
    * ~6 c3 W( W! U  r7 J7 N     1     2     3     1     2     2     1     6     5     1     2     6     4
    9 Y4 W5 N. Q. c  a9 B  M8 a' I     5     2     3     4     4     2     1     2     3     1     2     5     66 k- B9 H. _( T5 x% A
         1     2     6     1     2     2     1     2     3     1     4     3     2
    + N* {' y" G6 i9 v8 h# @     1     2     3     4     2     7     1     4     3     1     7     3     3# f6 w( V( }: [8 i0 D
         5     2     3     5     2     2     1     2     3     1     2     3     4
      _# S4 t& g0 E/ r6 k, |- C/ w     5     2     4     1     2     2     5     2     3     7     1     6     2

    4 u1 t  D* e5 Z1 K" Tdata2 =
         1     2     3     1     2     2     4     2     3     1     2     7     2' k* a# x! S/ D$ c& D# F
         1     2     3     6     2     2     1     4     3     1     5     3     1
    9 L$ F) x6 o/ x/ ]) b     1     2     3     1     2     5     1     2     4     1     2     3     2$ Q7 A6 s0 u  J2 b4 \
         1     2     7     1     2     2     1     2     5     1     2     4     1
    ) z6 C* z' n3 ^. y* q     5     2     3     3     5     2     1     2     3     1     2     3     6& Q8 h7 k% _& N" A( [  }7 \0 A
         1     2     3     1     2     2     1     6     5     1     2     6     4, ]' a: U9 K. k" f% r
         5     2     3     4     4     2     1     2     3     1     2     5     61 ^9 s9 d/ ~: \0 E/ l
         1     2     6     1     2     2     1     2     3     1     4     3     2
    6 @* T. J) Q9 s# b' y     1     2     3     4     2     7     1     4     3     1     7     3     3
    . R) W8 s$ ?+ W  Y- _4 G9 F, e     5     2     3     5     2     2     1     2     3     1     2     3     4* ]4 i7 b" X* y, @2 ^
         4     2     5     1     2     2     6     2     3     7     1     6     4
    iteration 1, loglik = -327.100465
    5 Z" O  j, j0 |1 x7 kiteration 2, loglik = -238.259812# P: e! A0 k# L" r6 B6 p# U
    iteration 3, loglik = -232.962948
    / }' S1 ~* \) i% Z7 ^8 m! m' ^& j5 witeration 4, loglik = -223.323891* h! M+ x) H  f; f
    iteration 5, loglik = -207.6308758 v% r2 f/ n8 g3 \# N/ B8 `
    iteration 6, loglik = -191.012697+ Y6 W2 q6 }: P1 x. H% \3 h
    iteration 7, loglik = -178.6115465 `* w5 R- e9 k( `9 @
    iteration 8, loglik = -171.5241328 p  `$ Z2 a% d( j+ L+ ?
    iteration 9, loglik = -168.626526
    8 c0 K* T9 k+ g# S6 o- }8 a; q% M# g, Witeration 10, loglik = -167.3870577 Z$ K; X: @7 g) ~4 l
    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
    1 T& ~9 q1 _  h3 f) N. {
    prior2 =
        0.0000
    1 U7 y2 H/ D% @; w. y" ~    0.00004 r$ B% }2 [7 Z0 Q6 g: P+ ~
        1.0000
    7 _: J& O8 t" g8 |5 b9 r    0.0000
    % u/ _! \: q. x    0.0000
    , t+ h2 y3 ^( H. R
    transmat2 =
        0.0138    0.0089    0.7680    0.1060    0.10331 n( e: d+ W* E% Q) q
        0.7811    0.0000    0.0199    0.0067    0.1923
    9 v3 V( f6 B8 q4 n    0.0000    0.9936    0.0000    0.0064    0.0000) A  _" Q: z- `' G# j) R6 m1 D* `
        0.1686    0.2604    0.2242    0.3398    0.0070; T5 D- u4 E, @* z
        0.0053    0.0406    0.8350    0.1184    0.0007

    ' i3 [: g. D3 f. f) H: {obsmat2 =
        0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.0351- G2 G' j4 ?4 s7 i0 g) G* c
        0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.02288 h5 Q( u$ E' }- l
        0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.0000
    3 K2 I+ y; F' p, ], b    0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.0055
    4 O( \0 ]1 Z( y! U    0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
    iteration 1, loglik = -277.738670  v9 n# p3 t& u" ~
    iteration 2, loglik = -242.163247
    ( T. Q  w, p7 w4 U) miteration 3, loglik = -238.321971
    ) E- K7 u, K3 C% w# I; Ziteration 4, loglik = -233.166746
    % s; J  n7 b/ M: ?# g. ?3 `iteration 5, loglik = -225.682259
    1 p8 p6 t6 V/ c% M! {, oiteration 6, loglik = -214.560296
    7 m5 ~/ n/ X1 D% Jiteration 7, loglik = -201.1820157 f$ A& r( f% w7 Z
    iteration 8, loglik = -189.427453( t' _/ _% h/ Y% P' U3 r
    iteration 9, loglik = -179.156352  E; U0 n0 H5 y' {! _. `: c
    iteration 10, loglik = -171.744096
    + e" M5 d+ @/ b" e3 n+ i' w: literation 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
    0 \$ ?6 p$ Z3 h* Q
    prior4 =
        0.0000
    . h8 W3 q1 ]: w' G/ H0 K  E/ B    0.9982
    # H" Q  O( ^- o& J, X7 ]- o. C0 B    0.0004
    * b" a- Z- J! O  ]4 l& M! [    0.0014
    ! T1 G. H( B+ v9 }2 f, @    0.0000

    ) N4 G5 b$ M8 o2 x! o5 Otransmat4 =
        0.0873    0.5277    0.2799    0.1007    0.00452 a( o, Y1 K# {+ k
        0.0002    0.0000    0.0005    0.0000    0.9994
    , \8 T3 U1 p  }/ m    0.0180    0.0000    0.0118    0.0011    0.9692
    " T3 }& W/ f5 t7 X5 ]. I( E    0.0436    0.0226    0.0810    0.0219    0.8310
    ) t$ o1 e6 G$ o8 G7 U8 R    0.9746    0.0056    0.0003    0.0195    0.0000
    4 q$ U0 l- C- @! C5 F  {. X+ M
    obsmat4 =
        0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.07705 q1 L) Y( u# ]0 ~0 @  t
        0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.0000) }1 l" P/ e" P7 J9 {
        0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001
    / p3 C: A6 G+ K    0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.08022 h/ z$ A& U6 U' L6 ?+ a: v
        0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225

    ! ?! V, A& X, h, C  }data1 =
         5     2     4     1     2     2     5     2     3     7     1     6     2

    " }( r: N+ W" B# iloglik =
      -19.2351
    * M3 w+ l  C: D: x% T+ L
    loglik2 =
      -21.0715

      \1 ]/ P0 a' W- Upath =
         3     2     5     3     2     1     3     2     1     5     3     2     1
    + W( q0 ^. c" H3 Y
    path2 =
         2     5     1     2     5     1     2     5     1     1     2     5     1
    & N3 M, G% {  l2 p
    fuhe =
         1

    . d% R7 O. _6 ~' @  T; L
    & H5 H; k9 ^0 R3 P/ Y
    $ f& \: r$ K3 w5 b) B- \

    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, 2025-8-21 23:01 , Processed in 0.485091 second(s), 54 queries .

    回顶部