QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 955|回复: 0
打印 上一主题 下一主题

隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱

[复制链接]
字体大小: 正常 放大
杨利霞        

5250

主题

81

听众

16万

积分

  • TA的每日心情
    开心
    2021-8-11 17:59
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

    自我介绍
    本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2020-5-9 17:36 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta

    + p3 N+ N* R; C8 V隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱
    4 j* H- Y, `( v+ ~3 s# U: {( K4 N
    % ①定义一个HMM并训练这个HMM。
    / O0 r1 [: ~( _( @6 {( h9 ]8 E1 U( y% ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。) g0 v1 W8 g1 F$ ?6 J9 h
    % 修改:旺齐齐
    * M: r  t7 w) P1 }) Q* F1 a* g4 \% 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。) T9 j' l- P8 q" {: ?7 Y
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % O:观察状态数
    . ^8 L( m) H- v; U; GO = 7;
    9 x0 R, J# g3 `9 q9 u( Q, WO2 = 7;, I( L: r9 O  J* d* A; G$ g
    % Q:HMM状态数, Q. m- K$ g7 Z0 G8 ?4 x1 v
    Q = 5;
    ) r; K- _. m& q+ _0 I" E, v! mQ2 = 5;
    % g) ]. m# u$ S1 f. ]%训练的数据集,每一行数据就是一组训练的观察值
    9 i6 Q9 F0 R, l0 g5 Rdata=[1,2,3,1,2,2,4,2,3,1,2,7,2;
    / s( ^9 o" N8 q# T      1,2,3,6,2,2,1,4,3,1,5,3,1;
    ! Q/ E! V, T- k! x1 F; G      1,2,3,1,2,5,1,2,4,1,2,3,2;2 B' f1 H" b# h) I" t3 z
          1,2,7,1,2,2,1,2,5,1,2,4,1;
    0 O6 N% Z5 R# b& O9 {      5,2,3,3,5,2,1,2,3,1,2,3,6;- f' \) f' a. B% e9 [5 @, Z" K
          1,2,3,1,2,2,1,6,5,1,2,6,4;  R+ ~* A- ^5 v1 ~" a- D0 y
          5,2,3,4,4,2,1,2,3,1,2,5,6;
    . q0 l- d( C9 x, D0 Z      1,2,6,1,2,2,1,2,3,1,4,3,2;
    ! o% l4 N0 \6 ^( l; i* F, T/ y3 j      1,2,3,4,2,7,1,4,3,1,7,3,3;
    . h% U6 ]4 E* a      5,2,3,5,2,2,1,2,3,1,2,3,4;9 A! N  f. V* q+ N, Z4 ?8 }
          5,2,4,1,2,2,5,2,3,7,1,6,2;]
    # R8 d  d/ h* `' \/ M1 F* v
      data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;3 Q4 S# k* k4 a! _+ s; ^- X
              1,2,3,6,2,2,1,4,3,1,5,3,1;
    3 H, |: O# h$ t          1,2,3,1,2,5,1,2,4,1,2,3,2;
    $ K0 Y  n# G7 W1 t3 R6 n6 T6 n          1,2,7,1,2,2,1,2,5,1,2,4,1;* Y' v# |) h- k2 Z: _! k" t7 C0 e
              5,2,3,3,5,2,1,2,3,1,2,3,6;; n+ Y& W! a6 i( q7 X
              1,2,3,1,2,2,1,6,5,1,2,6,4;
    * u% A! Q3 V9 [1 u2 t          5,2,3,4,4,2,1,2,3,1,2,5,6;' X, W7 v& V; L+ \# I
              1,2,6,1,2,2,1,2,3,1,4,3,2;3 U9 e! d- ]& _# f8 L% l3 W, r( Z
              1,2,3,4,2,7,1,4,3,1,7,3,3;4 S0 ]# w3 h2 c3 l) Y+ c
              5,2,3,5,2,2,1,2,3,1,2,3,4;
    + h* E$ A) o6 B) |; O0 N          4,2,5,1,2,2,6,2,3,7,1,6,4;]
    % initial guess of parameters, X0 S: x+ y9 V0 f1 H$ h. q' }. |& a
    % 初始化参数7 H: d. y: _) e6 D
    prior1 = normalise(rand(Q,1));
    6 t6 K; ]6 N7 e5 @7 Stransmat1 = mk_stochastic(rand(Q,Q));, }8 f7 R8 x( b. D, }8 x) U
    obsmat1 = mk_stochastic(rand(Q,O));
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    , S" [: B2 U& q* e% 添加部分) g; d! T8 p  E, K7 [
        prior3 = normalise(rand(Q2,1));
    ) G# E! Y5 j/ `, T: C% Y    transmat3 = mk_stochastic(rand(Q2,Q2));
    2 y1 C8 E9 U2 s- x* N7 @6 \    obsmat3 = mk_stochastic(rand(Q2,O2));9 L# z( n) y/ Q. @
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % improve guess of parameters using EM4 L0 @* R2 J3 s" V1 U1 [7 {' u" _
    % 用data数据集训练参数矩阵形成新的HMM模型( m9 v- C/ v/ T9 k6 R  Y1 l/ F+ B: y
    [LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));- v" A; d  ]- _, B: [
    % 训练后那行观察值与HMM匹配度) m6 H9 I. V3 y  L0 o7 ?
    LL
    7 N% p9 O( {" q7 m8 _( N( j4 b% 训练后的初始概率分布" _& z3 w  M( B2 X6 M
    prior2
    6 a  ]- I. q& Z( S) y. F* t- ^3 u% 训练后的状态转移概率矩阵
    , H. B* H. y( _4 V( i( c' mtransmat2" e: ]" G% ]1 d+ ~
    % 观察值概率矩阵) X0 ~+ t/ f; P; J8 y
    obsmat2
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%' J5 i) X, b# Y% S7 ~
    % 添加部分8 |& P6 |9 O8 O! b1 @5 A
        [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));% J* u* b3 U7 }
        LL2% L& A6 ~* {! u+ e. [( f( l
        prior4; f+ P4 Y5 J2 M" D; i7 {3 W9 x3 b6 v
        transmat4
    * Q: U* h$ _& c2 ~, G& o5 e    obsmat4
    7 {! u  q9 K- R+ \% P%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % use model to compute log likelihood# ^7 M( m: t0 o( Y% [
    % data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]
    7 p/ M" D: O  X, Wdata1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]- a1 r/ I0 v0 h2 F! l
    loglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)
    3 Z( o* f- W9 [1 S0 `% log lik is slightly different than LL(end), since it is computed after the final M step
    ' d$ V# h# J! @- \" C5 S3 L% loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
    % path为viterbi算法的结果,即最大概率path
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%. K8 _# x( u; U. x6 m+ }
    % 添加部分( X1 D2 y" O+ I" h
    loglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4); u1 g. {4 T* O: ]$ R9 q$ {: b( t
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    : T; `" Y$ {7 m6 b
    B = multinomial_prob(data1,obsmat2);
    3 h  P& i' D6 Wpath = viterbi_path(prior2, transmat2, B)
    ' e+ \  k0 H9 A7 X& z- Nsave('sa.mat');

    5 y" E( t$ `% v& w9 P9 @% T1 z%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ' o+ `/ n+ L* T$ ]% 添加部分
    # N8 L* b8 d* d& V8 u7 j    B2 = multinomial_prob(data1,obsmat4);
    6 K: _& V0 \: G2 S2 r" Q$ r    path2 = viterbi_path(prior4, transmat4, B2)
    , W8 ]1 b  J# I7 S% g: N  U- G2 @* P    save('sa2.mat');
    9 U( a& K. X& B& {" ^3 F    if loglik2 > loglik
    5 u) q( `% X( y+ H+ h8 [        fuhe = 2
    9 }* M! I+ r/ K' S    else2 u6 w2 z+ G6 E3 d
            fuhe = 1& t- D" z5 ]; @; B2 y. W, s% @
        end    / S+ Q; l8 X7 [: w* j, h# q2 P
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ------
    运行结果
    ------
    data =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    1 ?5 x+ J2 i( e2 A     1     2     3     6     2     2     1     4     3     1     5     3     1
    + O9 t0 a6 \$ Y     1     2     3     1     2     5     1     2     4     1     2     3     2- V- R1 L4 p9 d4 i2 E) E
         1     2     7     1     2     2     1     2     5     1     2     4     1
    1 J$ s% D0 V$ Z" D8 r% S$ z     5     2     3     3     5     2     1     2     3     1     2     3     6
    4 z5 w# s" N4 E# [5 m     1     2     3     1     2     2     1     6     5     1     2     6     4
    ) H( H# N/ ~$ p3 D     5     2     3     4     4     2     1     2     3     1     2     5     65 F$ Q( {% q7 R9 \5 Q1 _; m8 f
         1     2     6     1     2     2     1     2     3     1     4     3     2
    & b& q* P% p7 d$ |9 d' X. H: Z- H     1     2     3     4     2     7     1     4     3     1     7     3     3. M" p2 n" O5 B* T
         5     2     3     5     2     2     1     2     3     1     2     3     4
    3 C1 o, ~3 @# `9 I. j8 \; I     5     2     4     1     2     2     5     2     3     7     1     6     2

    $ c4 i+ A% t8 o$ hdata2 =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    0 p7 y* {: B3 f" }     1     2     3     6     2     2     1     4     3     1     5     3     16 N) c  z2 n2 g2 j$ x% s, h! R
         1     2     3     1     2     5     1     2     4     1     2     3     2) ~9 B" k' R* t+ U) t+ `5 {
         1     2     7     1     2     2     1     2     5     1     2     4     16 _" x, z  c  D5 Y8 x$ c
         5     2     3     3     5     2     1     2     3     1     2     3     62 F4 o, c+ S- _; T" _6 N7 z3 x
         1     2     3     1     2     2     1     6     5     1     2     6     4
    0 a7 c& i9 x6 M' j  @     5     2     3     4     4     2     1     2     3     1     2     5     6
    " `% w" g% N7 L5 r" Z7 U     1     2     6     1     2     2     1     2     3     1     4     3     2
    5 N, M" R" b0 ~, K# V" |     1     2     3     4     2     7     1     4     3     1     7     3     30 [3 E% }/ P7 {  |- H8 D
         5     2     3     5     2     2     1     2     3     1     2     3     4
    " s" t' }7 H6 i  R     4     2     5     1     2     2     6     2     3     7     1     6     4
    iteration 1, loglik = -327.1004659 E& k7 v) h7 c* i' n, F
    iteration 2, loglik = -238.259812
    ! g4 F! K4 R: N# |# K* l9 i: R6 Eiteration 3, loglik = -232.962948
    - h$ _$ V# h# W" fiteration 4, loglik = -223.323891
    9 w2 I5 Z/ N9 R& U: \iteration 5, loglik = -207.6308756 s( r- A4 h' J8 S( ]/ [
    iteration 6, loglik = -191.012697" `9 \3 D' T% r# t2 d" W7 C
    iteration 7, loglik = -178.611546: f; Q8 {7 K  l! f4 M4 T4 T6 {
    iteration 8, loglik = -171.524132" N, @% X7 {% z. E
    iteration 9, loglik = -168.6265264 V0 A* {! R3 x3 t* T- x' b' W
    iteration 10, loglik = -167.387057
    . B) q' R) q( ]7 }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 H  j6 m4 ]3 [, s: w2 y
    prior2 =
        0.0000
    ( X8 g( e+ G+ V- l    0.0000
    ( j" @; t0 A. m1 E( {5 T0 f# ^# `* }    1.0000) n" t) ?0 ]  U7 B! K( a: r
        0.0000) [' M4 d/ i# r6 e$ y9 [7 @
        0.0000

    2 @2 W) t. B8 @; K, a' ~  wtransmat2 =
        0.0138    0.0089    0.7680    0.1060    0.1033/ S1 A3 f, Z# m( r8 W8 M* i# Q* O1 d
        0.7811    0.0000    0.0199    0.0067    0.1923$ }4 G% `/ x3 {) A. S9 c5 U: J
        0.0000    0.9936    0.0000    0.0064    0.0000, ~" m  V* `4 {& M
        0.1686    0.2604    0.2242    0.3398    0.0070
    ( p# w& y" y$ b    0.0053    0.0406    0.8350    0.1184    0.0007
    4 S/ D1 J8 x/ G2 w
    obsmat2 =
        0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.0351! E/ ]0 L1 _: L  Q8 |8 ?3 s/ `
        0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.0228
    5 w4 [; o% i- s  W& u' _    0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.00003 B7 {2 g+ t0 v( }( U
        0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.0055
    0 u* l, \/ ]2 @7 B* ~    0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
    iteration 1, loglik = -277.738670
    , D( f% N7 Z, uiteration 2, loglik = -242.163247
    $ K7 K" I) V  T2 n( v, Z' Yiteration 3, loglik = -238.321971
    % i9 P$ A: n- m3 L8 u2 Eiteration 4, loglik = -233.166746
    ' {/ \& M7 b. L9 A! Qiteration 5, loglik = -225.682259/ C; w( z; ?1 q
    iteration 6, loglik = -214.560296  z% p+ O8 M2 X5 p* |! B! U
    iteration 7, loglik = -201.182015
    * M% }6 F0 _) J, q( A/ l- r, a- _- oiteration 8, loglik = -189.4274532 q6 c( Z  X* z, U3 n' h( c9 T
    iteration 9, loglik = -179.156352* D4 [. I- z& c! l
    iteration 10, loglik = -171.744096
    ) X; k7 R! \" N" G% W3 h' _; ]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
    7 I2 d6 Z) x$ b/ I+ V* o) l" _! y
    prior4 =
        0.0000( M! R( @  F" i! Z! D; j; u% ?$ S
        0.9982# Q8 y8 Y- H3 t! I" L1 L
        0.0004
    ! P9 d3 ^% [! ~5 @. B: N8 R    0.00141 p) g( L! C! V$ W" b
        0.0000
    : Y" J/ C( ^) ~8 b" x
    transmat4 =
        0.0873    0.5277    0.2799    0.1007    0.0045: S2 {: ]5 p: y! |& W& V
        0.0002    0.0000    0.0005    0.0000    0.9994+ M) J& P7 R7 t' P% u
        0.0180    0.0000    0.0118    0.0011    0.9692
    , Y) y, Z* x, B( \/ y6 T) \    0.0436    0.0226    0.0810    0.0219    0.8310
    1 ~7 U6 p* S3 V7 q( N    0.9746    0.0056    0.0003    0.0195    0.0000

    + \2 a# I# `/ y8 zobsmat4 =
        0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.0770' ^+ q; @" M- \/ Q
        0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.00000 u; ]; ?7 \% B
        0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001
    ) ?$ }9 i0 U% i& z5 _    0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.0802
    # q: I" u" P6 D, H; z    0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225
    " Y$ s4 |) A* k; o8 w( c5 O
    data1 =
         5     2     4     1     2     2     5     2     3     7     1     6     2
    : c. K& k: c, B( }: ^
    loglik =
      -19.2351

    : U1 D7 i0 J4 |2 H" f/ j5 ologlik2 =
      -21.0715

    & Q) |' E7 @; b8 _path =
         3     2     5     3     2     1     3     2     1     5     3     2     1

    0 I) ]2 x2 `! bpath2 =
         2     5     1     2     5     1     2     5     1     1     2     5     1
    9 T& i, I9 P8 O: H8 c3 S/ @: C5 z
    fuhe =
         1
    ! U  M% l. H6 {( s) R4 J! N

    - f/ e8 c4 ~/ I: ^
    7 i* m2 Z6 z; W; |1 k8 n+ E, K. A1 R

    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, 2024-4-27 12:18 , Processed in 0.396175 second(s), 54 queries .

    回顶部