QQ登录

只需要一步,快速开始

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

    9 a& {; g( e$ w  a3 w9 L隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱
    7 {: ]  r. U5 f+ P9 e# @
    % ①定义一个HMM并训练这个HMM。
    . p; ]* \3 m! w5 G% A% ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。* w7 h4 Y% [5 u+ @$ f
    % 修改:旺齐齐
    7 p' G) r4 k' w0 F0 z9 P% 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。
    $ L' x/ r* }6 |7 H' M% m& o%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % O:观察状态数! R* T/ L* G8 `1 z9 F0 {2 i3 ^) n9 l
    O = 7;) u* Q; W. j; s0 I( t, c  A
    O2 = 7;
    0 Y( F. z* H+ S0 p5 O7 ~% B% Q:HMM状态数
      h3 n$ i/ a1 h. M; D6 {! ?Q = 5;
    $ Q. `& S, i2 W  C* ]+ B2 m5 zQ2 = 5;& b5 D; `6 I) U5 G' l$ H: v8 O
    %训练的数据集,每一行数据就是一组训练的观察值1 D0 m1 s4 Z1 s
    data=[1,2,3,1,2,2,4,2,3,1,2,7,2;
    8 \0 o" y. N8 _' q" N' w- [      1,2,3,6,2,2,1,4,3,1,5,3,1;/ F2 |8 J7 B. r7 {# a, Q  A% L
          1,2,3,1,2,5,1,2,4,1,2,3,2;- w# L3 i/ i) c6 G* X8 U, z( _( p5 s0 {
          1,2,7,1,2,2,1,2,5,1,2,4,1;6 v! ^9 n( d  z# M! Y& {$ F
          5,2,3,3,5,2,1,2,3,1,2,3,6;
    ! D5 m" s( u3 \  D  O% g1 b+ L      1,2,3,1,2,2,1,6,5,1,2,6,4;9 G* d1 q4 Y( y
          5,2,3,4,4,2,1,2,3,1,2,5,6;
    ) o7 u6 i' o8 a' z4 O) E      1,2,6,1,2,2,1,2,3,1,4,3,2;
    * }6 }' s3 j+ M      1,2,3,4,2,7,1,4,3,1,7,3,3;) x7 s; A  j) @( z
          5,2,3,5,2,2,1,2,3,1,2,3,4;8 [/ g1 w! V3 V# M1 G% x
          5,2,4,1,2,2,5,2,3,7,1,6,2;]
    ' A) ?7 O3 _% t
      data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;$ O% w- j7 S# e+ x" ~
              1,2,3,6,2,2,1,4,3,1,5,3,1;
    # z3 |; O+ x3 y; _1 `- U* _* M          1,2,3,1,2,5,1,2,4,1,2,3,2;: O- f# }1 v7 u
              1,2,7,1,2,2,1,2,5,1,2,4,1;' o' u$ B  s/ N6 ^7 T
              5,2,3,3,5,2,1,2,3,1,2,3,6;
    $ z8 Q& t8 H- r* G: Q/ ~0 A          1,2,3,1,2,2,1,6,5,1,2,6,4;
    7 ?. P1 W  A; {          5,2,3,4,4,2,1,2,3,1,2,5,6;
    / f6 W/ j6 s* ?0 l2 y' p! ^          1,2,6,1,2,2,1,2,3,1,4,3,2;. \, t2 M: U" s2 \2 U5 q  @
              1,2,3,4,2,7,1,4,3,1,7,3,3;$ n* k# O9 p/ z- o8 I
              5,2,3,5,2,2,1,2,3,1,2,3,4;
    3 f9 V( z/ J, X' b& h          4,2,5,1,2,2,6,2,3,7,1,6,4;]
    % initial guess of parameters# E" @" r" e% f  j7 ?( Q) s* g
    % 初始化参数0 z' y! s" c1 b1 n
    prior1 = normalise(rand(Q,1));
    ' k$ J4 n7 W* n+ htransmat1 = mk_stochastic(rand(Q,Q));
    ; T* {/ c. I, t7 gobsmat1 = mk_stochastic(rand(Q,O));
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%# R9 P8 ?' p. i( y4 t
    % 添加部分
    8 I% b! _% Z( E) }8 L4 ^- L    prior3 = normalise(rand(Q2,1));
    & L" k- r4 ^& J( I7 u* n) k    transmat3 = mk_stochastic(rand(Q2,Q2));8 V$ }& A  _7 N4 ]' ?
        obsmat3 = mk_stochastic(rand(Q2,O2));
    0 ~3 w, r( ~' X; w3 K- p. }# b%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % improve guess of parameters using EM
    - t+ ?9 x; Y6 ~% _2 a8 W% s5 E: x& F% 用data数据集训练参数矩阵形成新的HMM模型0 S. J4 ]/ n1 E. l# |
    [LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));$ A) N* y+ N8 O' U, |8 s+ x1 Z
    % 训练后那行观察值与HMM匹配度
    5 P+ ^0 T1 n& _LL
    8 U& A& J1 U8 U0 }9 @. C1 N6 e# o% 训练后的初始概率分布* G+ @; k, W9 m; p! p2 {. i
    prior29 g. c" m) L3 k. P
    % 训练后的状态转移概率矩阵0 |( t; p, C4 m" Z& Z# A
    transmat26 k9 ^& n2 M; _
    % 观察值概率矩阵
    1 I' }0 n5 Y. x/ pobsmat2
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%, Y' C- i3 x8 l' G/ S8 F
    % 添加部分
    ; W( I2 Q$ x% l$ r    [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));
    3 p4 n# O4 `+ j2 t3 X    LL2
      A8 U1 [% R) B8 F/ N2 q9 f    prior4
    & m" u) c9 K# n! t3 U* `+ R    transmat4
    ) p/ N5 a& f# d6 q( [% V& r    obsmat48 r. O* z+ ]  N- ?  H/ c% V6 J4 b
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % use model to compute log likelihood2 R. q( k4 d( q! a! Z4 W4 H
    % data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]2 _6 j' m, @/ a' D
    data1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]) R$ X! Q: f- V2 ~" U
    loglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)8 I& D' L+ K! e  B# Y( x
    % log lik is slightly different than LL(end), since it is computed after the final M step
    # @1 }1 U0 L! \- m% loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
    % path为viterbi算法的结果,即最大概率path
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%, j% O/ w2 N# q  d9 H
    % 添加部分
    6 Z5 A: t/ q; M$ |- G6 U% V- Wloglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)) V, P4 z) o# z" R
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    ! r5 D" |# Q, E' YB = multinomial_prob(data1,obsmat2);
    5 ]( m! x$ m7 z; opath = viterbi_path(prior2, transmat2, B)
    * I. e. L- ^% l, C. nsave('sa.mat');

    ( h0 D6 z% @( y4 x, _0 N: P7 _3 C%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%1 w  ?) `- b' q7 t
    % 添加部分2 C3 k2 z) d1 b! z0 n
        B2 = multinomial_prob(data1,obsmat4);/ V& }# l& J0 v* Q/ ^6 _( ~
        path2 = viterbi_path(prior4, transmat4, B2)
    - c- Z9 c" T) h9 i2 M$ T) e4 M% m3 `    save('sa2.mat');; b4 L; a5 m' y! j* y. Y; D5 D
        if loglik2 > loglik ' W% B" f( h, c4 _1 j4 }; b9 {7 o
            fuhe = 28 s! i# {9 A* i3 h( e8 R% b% z
        else- |4 |* D& {: E1 S1 i" U
            fuhe = 1) g7 h  u/ s3 K; n
        end   
    - ], ~3 T$ e$ v& A, L%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ------
    运行结果
    ------
    data =
         1     2     3     1     2     2     4     2     3     1     2     7     2, N, X2 J8 r8 u* ^
         1     2     3     6     2     2     1     4     3     1     5     3     1
    % ~8 y$ q0 z# I) O# e     1     2     3     1     2     5     1     2     4     1     2     3     2% V) t4 Y* Z  O
         1     2     7     1     2     2     1     2     5     1     2     4     1$ X# L7 f3 [# h! T7 t/ J. I- Y3 ?
         5     2     3     3     5     2     1     2     3     1     2     3     6
    / p0 B* q3 Q5 m' g+ }* ^, G     1     2     3     1     2     2     1     6     5     1     2     6     4( ^( U0 S  a$ G. k4 Z# B' i
         5     2     3     4     4     2     1     2     3     1     2     5     6
    ' o/ c& |4 y' T& g     1     2     6     1     2     2     1     2     3     1     4     3     2
    8 S, T  @2 r9 m, [! r2 _     1     2     3     4     2     7     1     4     3     1     7     3     3
    9 a9 e/ a4 I# P5 G8 K( I3 I& W     5     2     3     5     2     2     1     2     3     1     2     3     4
    8 \; ~4 g( U8 W; \5 S     5     2     4     1     2     2     5     2     3     7     1     6     2
    & M. Q) n, b8 `& K& y- [2 M
    data2 =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    ' b" F" b0 _- z6 C1 L4 W     1     2     3     6     2     2     1     4     3     1     5     3     1* y* q( {  q/ y- y" j. @
         1     2     3     1     2     5     1     2     4     1     2     3     25 d0 n& L( I& F8 d% d
         1     2     7     1     2     2     1     2     5     1     2     4     1
    - C' a6 q# w6 E. V     5     2     3     3     5     2     1     2     3     1     2     3     6
    ! z4 y( [" ], x+ i     1     2     3     1     2     2     1     6     5     1     2     6     4
    + W$ n( r# t+ ]0 l8 ]( @! o1 x     5     2     3     4     4     2     1     2     3     1     2     5     67 A# j3 Z0 F" r  |4 X9 s
         1     2     6     1     2     2     1     2     3     1     4     3     2( }* A1 l! ^- [% O' ]
         1     2     3     4     2     7     1     4     3     1     7     3     3; ]% U- [0 u" t& x5 x" a( ]
         5     2     3     5     2     2     1     2     3     1     2     3     4! y  |; O  X3 E7 _. |8 z+ D, [
         4     2     5     1     2     2     6     2     3     7     1     6     4
    iteration 1, loglik = -327.100465/ K  f. W2 L+ M) a0 o) Y* h" ~5 Y
    iteration 2, loglik = -238.259812
    % C9 |2 ]- a7 }4 Riteration 3, loglik = -232.962948( m0 k; E: H) t1 \7 J/ G
    iteration 4, loglik = -223.3238910 {+ J' {% s: S8 N- |
    iteration 5, loglik = -207.630875" }: f, v7 n5 C. H& ^  Z5 d
    iteration 6, loglik = -191.012697
    " \# w) q! D# L9 p' u/ Witeration 7, loglik = -178.611546
    4 [/ \* P0 `, Y3 e7 |! h( c1 {3 literation 8, loglik = -171.524132
    6 |1 }# R- o$ ]8 K! U4 Biteration 9, loglik = -168.626526
      v+ B0 g( [3 t/ G- Oiteration 10, loglik = -167.387057+ j6 ?9 X- B6 c5 {
    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

    + A* N& ]: D6 Y( ?/ K' S/ Iprior2 =
        0.00007 s+ R) {# J: b, S
        0.0000
    9 D* S- r% T" i. e8 a: A5 M    1.0000
    ; w# ~5 U6 h9 a    0.0000$ c& w' H- p" p& v/ t  I! M3 t
        0.0000

    " N8 p8 H2 x& `: [7 S* ptransmat2 =
        0.0138    0.0089    0.7680    0.1060    0.1033
    3 R: y0 {; |. P  }1 [5 g    0.7811    0.0000    0.0199    0.0067    0.1923
    2 \) M* ^$ Q. p    0.0000    0.9936    0.0000    0.0064    0.0000: `% N9 Z1 v  m6 h* c+ M
        0.1686    0.2604    0.2242    0.3398    0.0070
    5 t3 V8 g* i2 ~4 U0 x8 v    0.0053    0.0406    0.8350    0.1184    0.0007
    ' ?) m/ p' Y* ~  a0 ~9 P( e0 C
    obsmat2 =
        0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.0351# |/ r9 N6 u2 l3 P; Q7 |
        0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.0228
    4 J. X8 ^5 }3 n/ M. s    0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.00007 w( I+ ^0 P. C- S
        0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.0055
    1 S7 ?+ K" g5 _" C! X- n8 T$ d    0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
    iteration 1, loglik = -277.738670
    ; q' s# ~6 _8 S# }iteration 2, loglik = -242.1632478 f9 _& [7 F' I
    iteration 3, loglik = -238.321971
    8 m, B0 J' q# T9 N3 f- Biteration 4, loglik = -233.1667468 M" G6 Q) B$ b
    iteration 5, loglik = -225.6822596 s+ z2 h9 l5 b9 u( p' R
    iteration 6, loglik = -214.560296- K! i. ?# Z  n- r: f  O/ T
    iteration 7, loglik = -201.1820159 U. N2 B& T8 _/ c8 p& E  l
    iteration 8, loglik = -189.427453
    / ]1 p" G- ]9 s1 V3 D' [iteration 9, loglik = -179.156352
    : C$ C6 Q! L+ ]) ^0 ?! V1 ?iteration 10, loglik = -171.744096
    ! y$ L8 w/ m" ?. G0 niteration 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
    ) h( e; V6 x. B/ \2 Z  T
    prior4 =
        0.0000
    9 ?0 {! z7 m9 b# K; J( V$ V% W" q, ?    0.9982
    $ p; j- f& [: ^    0.0004
    : {2 \/ D1 x# H. J    0.0014# k* ^# K) C# }% ~8 T3 H/ v. l
        0.0000

    . I0 c2 M+ O  z$ Jtransmat4 =
        0.0873    0.5277    0.2799    0.1007    0.0045
    * n  n# @* U0 e    0.0002    0.0000    0.0005    0.0000    0.9994; k+ c$ v" g: A- h3 {" T
        0.0180    0.0000    0.0118    0.0011    0.9692/ {# i2 ^' V( g6 m
        0.0436    0.0226    0.0810    0.0219    0.8310
    4 h( Z2 L& h3 q7 p4 l    0.9746    0.0056    0.0003    0.0195    0.0000
    8 w1 V3 _/ q4 S' I0 p4 O
    obsmat4 =
        0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.07703 g4 o# o: c9 W; _" C' H
        0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.0000
    " L! ~* h; b7 u0 V! b% W$ b% v    0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001# W) q7 }5 z7 J5 W3 B
        0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.08020 o  m/ h" r8 z0 w
        0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225
    8 E2 h- O* \- s) T: R& j
    data1 =
         5     2     4     1     2     2     5     2     3     7     1     6     2

    ( i- }  u# Y' Q, B# Zloglik =
      -19.2351
    , \" [2 f5 S6 J- T! Z& c1 n
    loglik2 =
      -21.0715

    ! A. g% ^0 V) D/ w7 O$ rpath =
         3     2     5     3     2     1     3     2     1     5     3     2     1

    2 X) y2 ~" b% W3 mpath2 =
         2     5     1     2     5     1     2     5     1     1     2     5     1

    ' v1 a% A2 U+ g5 A. B2 Zfuhe =
         1
    ! L7 l9 }, R- I

    # O7 A- s+ {0 W9 A1 m
    - X% u. U5 H3 V/ a0 ^% k/ }' w( _

    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-31 04:00 , Processed in 0.530468 second(s), 55 queries .

    回顶部