QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1779|回复: 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 ]) L; M6 M8 s8 @) G隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱
    ! a+ l! s) K. [
    % ①定义一个HMM并训练这个HMM。
    3 I+ r' g( M- a  w6 @! R+ [) T% ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。
    + s2 ~6 [# l# W8 M/ A6 x: \% 修改:旺齐齐
    1 e7 B8 V! ^) |" t' Y& a4 Q% 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。
    8 F2 @8 q/ v+ T, v7 e; b%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % O:观察状态数7 I$ m4 M+ U5 Z, t7 n
    O = 7;
    / }. g9 W+ n5 b% x# p! {O2 = 7;+ g0 Z& }+ V/ K! c
    % Q:HMM状态数
    3 H) }' ?5 |0 s% s' n. g9 ?! B8 QQ = 5;
    # F( H+ B( x: OQ2 = 5;+ _( |% q8 t  o; w0 G  z* B" L( {
    %训练的数据集,每一行数据就是一组训练的观察值
    ' ?9 }$ V4 ]9 M( h' q% \3 Kdata=[1,2,3,1,2,2,4,2,3,1,2,7,2;
    3 V! X; H6 u7 j      1,2,3,6,2,2,1,4,3,1,5,3,1;4 X9 ~; t8 V: [3 _2 H
          1,2,3,1,2,5,1,2,4,1,2,3,2;3 A$ u2 d( o3 @
          1,2,7,1,2,2,1,2,5,1,2,4,1;  d/ ]* d- j1 q2 m& c8 L! {. M6 p
          5,2,3,3,5,2,1,2,3,1,2,3,6;
    3 T5 ?0 E2 h: ~2 ~5 L5 k: h      1,2,3,1,2,2,1,6,5,1,2,6,4;
    7 |0 N- e6 U* i' N7 E      5,2,3,4,4,2,1,2,3,1,2,5,6;
    5 K' |; h; _0 K) k4 \      1,2,6,1,2,2,1,2,3,1,4,3,2;
    + m% V4 t- v3 H1 ~) t) l      1,2,3,4,2,7,1,4,3,1,7,3,3;
    " O8 f1 ~2 L- A0 A; ]. h: r      5,2,3,5,2,2,1,2,3,1,2,3,4;- r3 ^9 y6 c1 N& N2 D/ ]7 o
          5,2,4,1,2,2,5,2,3,7,1,6,2;]

    # v( D# x  b& h/ ]$ y: }8 m0 E  data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;
    % T2 F; q. A! s) n& n7 D* E  T/ x          1,2,3,6,2,2,1,4,3,1,5,3,1;1 v4 m5 Q% b. }, \
              1,2,3,1,2,5,1,2,4,1,2,3,2;* W9 r7 S# ^. F% [% L: h
              1,2,7,1,2,2,1,2,5,1,2,4,1;
    5 D+ u; R; d: \% x7 O; o          5,2,3,3,5,2,1,2,3,1,2,3,6;7 @, F3 A2 W+ d
              1,2,3,1,2,2,1,6,5,1,2,6,4;0 h% A9 |0 N" R, ~7 z7 r* e! K
              5,2,3,4,4,2,1,2,3,1,2,5,6;  o, v) r" h4 K- x# G4 G* |
              1,2,6,1,2,2,1,2,3,1,4,3,2;* Z/ o7 V2 L/ A6 b+ l2 g* D
              1,2,3,4,2,7,1,4,3,1,7,3,3;
    % [. Q* x8 V. W6 S- }2 T# ]          5,2,3,5,2,2,1,2,3,1,2,3,4;8 [" M7 v, o0 j# m* ~+ f/ E
              4,2,5,1,2,2,6,2,3,7,1,6,4;]
    % initial guess of parameters. ~" }0 x% \9 A, ~, E
    % 初始化参数9 X( P2 N7 f! Z4 x1 D
    prior1 = normalise(rand(Q,1));
    $ M( B/ D9 N7 z$ A- y2 y' Ntransmat1 = mk_stochastic(rand(Q,Q));
    ; J1 Q9 ?, n4 a- T0 {3 @2 lobsmat1 = mk_stochastic(rand(Q,O));
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" q4 [: M/ L3 Q8 p0 @
    % 添加部分
    , t) x& {8 `3 ~9 S+ P- \    prior3 = normalise(rand(Q2,1));
    4 R  r) c, Z! F* @( A9 A    transmat3 = mk_stochastic(rand(Q2,Q2));/ M5 y5 r: ]& b& }$ c- P
        obsmat3 = mk_stochastic(rand(Q2,O2));
    . t9 N9 F5 N* |4 ?3 ?%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % improve guess of parameters using EM
    ( b' t$ ?% N/ `; k" p/ n% 用data数据集训练参数矩阵形成新的HMM模型$ j  n; }- _# O" Y7 A/ [: R( E
    [LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));  b$ Z0 T; Y. v7 Q1 Y5 w; ]
    % 训练后那行观察值与HMM匹配度. X- Q" ^$ ^4 |6 P/ X
    LL
    6 V1 U7 o6 Z0 k& W/ R* p" A/ P% 训练后的初始概率分布
    ; z+ |% l+ b* k0 e* d. dprior2
    ; O7 F0 ]+ v: k5 \% 训练后的状态转移概率矩阵4 l  F: _& P8 C  k6 e' _4 K
    transmat2
      S4 u  L6 q4 f; }& S2 b% 观察值概率矩阵
    1 \( n0 X, n# K& H& Q9 R5 E/ _obsmat2
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%. f5 O* u# q+ d% B! H' E. {! T, q
    % 添加部分3 h  |3 x% M7 P9 O
        [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));/ W7 P1 w( e5 F8 e6 N
        LL2; J0 E. E8 A; a" A! n  Z% w8 X5 [
        prior4) Z4 n' Q, z$ {4 g1 Y
        transmat4
    # J& _- f+ O( M2 x; ~& N  Z5 o    obsmat4* I  l& |# J9 {. X- b' K+ o
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % use model to compute log likelihood
    ) b- l2 Q  G" l8 M4 [% data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]
    : ?0 s1 s# q3 |! `data1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]/ {/ j1 {) [$ a" W7 c. O8 I( O
    loglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)
    - u7 x7 D+ H# Z; s; t, b: N% log lik is slightly different than LL(end), since it is computed after the final M step
    9 t- J/ \. Q* @7 p  Q% \- q% loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
    % path为viterbi算法的结果,即最大概率path
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%7 L; y8 E+ x& F  N1 b
    % 添加部分
    " r1 L( ?2 r7 A* p) ]loglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)+ @( E3 {  i# y* _, B+ T
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    5 H" p4 i$ r- X  c& z
    B = multinomial_prob(data1,obsmat2);
    $ x$ t/ x1 ^8 _# C! L0 Kpath = viterbi_path(prior2, transmat2, B)! u. n9 R5 w, k
    save('sa.mat');

    ) s. s2 _' g* @  j, I%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%- n4 F, k. @, F6 a) Q% I
    % 添加部分# F' {8 L% V- S: U. G
        B2 = multinomial_prob(data1,obsmat4);
    7 M0 c3 E: V  j  i; i    path2 = viterbi_path(prior4, transmat4, B2)8 Q  [1 {* ?1 r2 {7 r/ i
        save('sa2.mat');
    - D$ J+ b$ n7 u' X    if loglik2 > loglik ! c2 \' s* y% b3 v6 a
            fuhe = 2* r2 a$ m9 h4 _2 b/ u. V+ O
        else5 x; _9 J; Y) T7 N  I3 ]
            fuhe = 1/ w9 P; V, g) c% w! }
        end    5 D& o) ~0 v0 o7 K
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ------
    运行结果
    ------
    data =
         1     2     3     1     2     2     4     2     3     1     2     7     2% H$ l) p- V4 [# A
         1     2     3     6     2     2     1     4     3     1     5     3     12 |* R  C- A: p$ _0 M9 X
         1     2     3     1     2     5     1     2     4     1     2     3     2$ J7 m  j- l# s/ V6 ]7 k% l
         1     2     7     1     2     2     1     2     5     1     2     4     1& {. {" L2 U# t+ {2 P9 D0 ~
         5     2     3     3     5     2     1     2     3     1     2     3     6
    + w% \$ R, P8 |  `* s, g7 g     1     2     3     1     2     2     1     6     5     1     2     6     44 m7 I* Z! ^* e
         5     2     3     4     4     2     1     2     3     1     2     5     6/ L5 z9 B4 A* n& @: D9 G, n" h) B/ u
         1     2     6     1     2     2     1     2     3     1     4     3     2$ N( S1 [) i) c8 H5 M& L: A
         1     2     3     4     2     7     1     4     3     1     7     3     3
    * ^( j8 y3 J6 f, m     5     2     3     5     2     2     1     2     3     1     2     3     4
    1 w7 `+ r: `; U2 {. o6 C* `+ O     5     2     4     1     2     2     5     2     3     7     1     6     2
    ' b: q+ }) L2 m4 Z! \  S9 a
    data2 =
         1     2     3     1     2     2     4     2     3     1     2     7     2$ }. v  \* m+ }# K8 n9 |
         1     2     3     6     2     2     1     4     3     1     5     3     1% P9 u! q  y# N: \2 v, B" Y& t" n
         1     2     3     1     2     5     1     2     4     1     2     3     23 ?: V  k# u9 J) t8 C( }
         1     2     7     1     2     2     1     2     5     1     2     4     1/ p3 z8 w  g4 I6 B; b- h
         5     2     3     3     5     2     1     2     3     1     2     3     6
    # U5 |$ E; W+ F0 Q     1     2     3     1     2     2     1     6     5     1     2     6     4& J, G+ y2 I: ?7 c3 d0 M7 |
         5     2     3     4     4     2     1     2     3     1     2     5     6: g* {) J/ W5 ]% [
         1     2     6     1     2     2     1     2     3     1     4     3     2
    / E# q0 a! A0 a- x; @* z     1     2     3     4     2     7     1     4     3     1     7     3     3
    ( i$ O- f( v7 Q8 V     5     2     3     5     2     2     1     2     3     1     2     3     4/ c: }8 k% x9 e* ]% j0 h3 M
         4     2     5     1     2     2     6     2     3     7     1     6     4
    iteration 1, loglik = -327.100465
    5 a6 E; n- H; R, p$ g4 n+ H( hiteration 2, loglik = -238.259812! i" {, T; v- D3 R
    iteration 3, loglik = -232.962948
      v8 R  C. @1 L2 a, Uiteration 4, loglik = -223.323891$ W# m3 G* g  J9 x8 D
    iteration 5, loglik = -207.630875
    # V5 g2 t( D/ j1 s' D# i4 P; y) Qiteration 6, loglik = -191.012697
    . z- L6 H- z! ?; Witeration 7, loglik = -178.611546
    9 q0 F- D3 v& V0 Y* y0 H& niteration 8, loglik = -171.524132
    , ~8 `' @  R. P$ Giteration 9, loglik = -168.6265263 D; a  B$ v% i) @( u
    iteration 10, loglik = -167.3870571 D; O; @; S2 P) T8 `: G0 k: X# q
    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 \4 I9 a1 Q2 ~5 i. I" F3 Mprior2 =
        0.0000/ X. a$ g7 C+ {7 Y3 G7 [
        0.0000- C1 E! K* N- i7 O) b, d) m5 p
        1.0000
    ; ^* E3 K7 N2 J8 Z" X- z4 |  o' p    0.0000
    4 ^! }2 P8 E5 Q6 p8 |    0.0000
    ( e& b' D/ s8 ]! |6 W
    transmat2 =
        0.0138    0.0089    0.7680    0.1060    0.1033  c& ?0 A) z/ G0 n5 z  ^
        0.7811    0.0000    0.0199    0.0067    0.1923: f# \: C7 ]5 I: n
        0.0000    0.9936    0.0000    0.0064    0.0000/ \  R; F4 y! A4 D  k3 C8 Q
        0.1686    0.2604    0.2242    0.3398    0.0070) a7 B8 N2 }; Z% M: W  ~! \2 O) ^
        0.0053    0.0406    0.8350    0.1184    0.0007

    # S9 @8 d- F; i% @' }obsmat2 =
        0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.0351
    " q' w, ^7 ]4 {, i    0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.0228+ D/ S; h; f1 _" Q2 M; v
        0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.0000
    - X  H& J3 B/ h    0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.0055
    8 H& c/ v5 t, g2 C, A1 v    0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
    iteration 1, loglik = -277.738670
    ; y- }8 Z, O) L0 K* g: J4 piteration 2, loglik = -242.163247
    8 W% ^1 }" n& K9 \iteration 3, loglik = -238.321971* h! z4 R( a4 T: d$ {! M: |4 `
    iteration 4, loglik = -233.166746+ X9 F8 o$ Y; Z0 U
    iteration 5, loglik = -225.682259
    " Y' n6 u% S- Q! Z3 Kiteration 6, loglik = -214.560296" D2 D2 J5 ]! c) R- n) n4 ]( x
    iteration 7, loglik = -201.182015
    7 E- D3 g# z3 v! ~/ t; t4 z" fiteration 8, loglik = -189.4274531 N" P0 q5 l; s8 @( p* f, ^3 `
    iteration 9, loglik = -179.156352
    / O, i0 ]# L  X* w: v4 x3 l! [iteration 10, loglik = -171.744096! J( g3 i3 x3 `
    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
    * K1 w( {* A- u8 f7 D7 [
    prior4 =
        0.0000
    $ |3 v& Z- a' t. j  Y& m. Q    0.9982! f- e5 m  l: v3 O
        0.0004' [7 A6 \3 ?5 h
        0.0014
    ; Z8 O. K. E5 m  b    0.0000

    ) _) R+ X$ A+ M5 C3 utransmat4 =
        0.0873    0.5277    0.2799    0.1007    0.00456 p, M# y7 O: z8 }6 E0 l7 x
        0.0002    0.0000    0.0005    0.0000    0.9994- O* \% P, p" g- R: N
        0.0180    0.0000    0.0118    0.0011    0.9692& c+ q* I3 e( Y/ }
        0.0436    0.0226    0.0810    0.0219    0.83108 _+ O. ]; C" r6 w
        0.9746    0.0056    0.0003    0.0195    0.0000

    9 y5 s; i) f  l* Hobsmat4 =
        0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.0770
    - W: p% j  o7 A8 h" I3 \& _* A0 Q    0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.0000
    # ^) E( D/ ~7 [5 Y    0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001+ H! B  E( v( g- t* v! E
        0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.0802
    : c( T( g# H. [6 k    0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225
    5 m4 J5 s; o- @
    data1 =
         5     2     4     1     2     2     5     2     3     7     1     6     2

    7 y1 L* v2 k$ B* a7 O& e" C  sloglik =
      -19.2351
    $ T* S, ~, o7 ]% I+ a. F5 h: H
    loglik2 =
      -21.0715

    ' i& |, ^% c3 F' Zpath =
         3     2     5     3     2     1     3     2     1     5     3     2     1

    4 t( ~# K1 D; G3 M, k0 L- Apath2 =
         2     5     1     2     5     1     2     5     1     1     2     5     1

    " ?9 M$ Q! K$ @* tfuhe =
         1
    + L6 q! F* {; |8 x# O+ x

    " J+ B7 g) r! k. h# N2 i( r5 W/ f( K# z# U# p

    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-25 09:01 , Processed in 0.642292 second(s), 55 queries .

    回顶部