QQ登录

只需要一步,快速开始

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

    , u1 c+ K2 [$ S0 v% Y隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱
    * u* h+ K6 ]: D5 l
    % ①定义一个HMM并训练这个HMM。/ ?& f  d8 N) B. r0 U& ^  _/ c
    % ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。7 N  v/ |8 O0 z+ J2 \
    % 修改:旺齐齐/ N$ v+ l5 O& l$ C* ^
    % 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。8 K$ V  ]0 j9 M, g" C* `; Z
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % O:观察状态数
    4 K: C# S" \& |1 B, YO = 7;& L( L, H' W8 a9 T+ K  |' X8 |
    O2 = 7;
    8 X% S' c  v% J5 e& _' K% Q:HMM状态数! b* w1 W" D* q! |
    Q = 5;" v9 u) m5 h1 P) r
    Q2 = 5;
    1 Q1 Q+ S* B3 u# |3 a! J% v5 E3 w%训练的数据集,每一行数据就是一组训练的观察值$ R$ l, [4 R1 l; M
    data=[1,2,3,1,2,2,4,2,3,1,2,7,2;
    ( V- i7 |* X: s9 ]: Q8 X5 @- _6 l      1,2,3,6,2,2,1,4,3,1,5,3,1;: V( j) V- S! F4 j* i: D" O0 p  L
          1,2,3,1,2,5,1,2,4,1,2,3,2;" Z* [7 D6 y6 v6 C2 b0 E
          1,2,7,1,2,2,1,2,5,1,2,4,1;
    6 X# }5 R+ @/ b$ G2 [      5,2,3,3,5,2,1,2,3,1,2,3,6;
    8 [, @& `4 L/ ]2 y3 [      1,2,3,1,2,2,1,6,5,1,2,6,4;* x# T9 J! {$ |- D/ X
          5,2,3,4,4,2,1,2,3,1,2,5,6;( {9 _9 u1 p* k; |" E4 S  |/ U
          1,2,6,1,2,2,1,2,3,1,4,3,2;: f1 ]  T2 D& e9 l2 l5 e9 W
          1,2,3,4,2,7,1,4,3,1,7,3,3;
    5 S' A( B) J& G( V, Y- S0 \1 h  q      5,2,3,5,2,2,1,2,3,1,2,3,4;
    3 }# D, [  y; \6 `      5,2,4,1,2,2,5,2,3,7,1,6,2;]

    8 P! B9 w4 d5 Y7 n! ^  data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;
    ) K4 \, y% \* |3 o  e$ P/ Q" k! Y          1,2,3,6,2,2,1,4,3,1,5,3,1;
    : c+ A( M. d. m9 B          1,2,3,1,2,5,1,2,4,1,2,3,2;
      O2 }% V2 e. p5 A2 u* d0 {3 o2 B          1,2,7,1,2,2,1,2,5,1,2,4,1;, l- E4 I+ T; |6 T0 `
              5,2,3,3,5,2,1,2,3,1,2,3,6;
    % V0 u+ H. M) a3 r7 K          1,2,3,1,2,2,1,6,5,1,2,6,4;7 E, @& [; I: S7 b% p3 m/ M/ o
              5,2,3,4,4,2,1,2,3,1,2,5,6;4 L! K/ C3 k# O8 X
              1,2,6,1,2,2,1,2,3,1,4,3,2;
    2 d! |8 j. A7 M* k2 v6 w& b          1,2,3,4,2,7,1,4,3,1,7,3,3;
    / K) f% n7 `) k. `5 @  B          5,2,3,5,2,2,1,2,3,1,2,3,4;
    % p& \4 s7 O4 w! }: \% A5 E          4,2,5,1,2,2,6,2,3,7,1,6,4;]
    % initial guess of parameters
    $ k: Q7 y) O4 K0 S% 初始化参数
    $ V/ G& r3 f8 {7 Uprior1 = normalise(rand(Q,1));
    4 f  ~) b) b  t7 Rtransmat1 = mk_stochastic(rand(Q,Q));
    6 [7 r7 x; X" m8 G" z9 o' \obsmat1 = mk_stochastic(rand(Q,O));
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%- w0 @4 R; B8 v: ~
    % 添加部分
    ( w& D' x+ ]8 a! X: P9 x0 X" c, p( w0 D    prior3 = normalise(rand(Q2,1));
    $ U# `# w& i* S7 H3 f; Z% d    transmat3 = mk_stochastic(rand(Q2,Q2));  a0 O, T# S- O
        obsmat3 = mk_stochastic(rand(Q2,O2));
    1 C5 z3 C5 r* X* n+ {7 b' U%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % improve guess of parameters using EM% {& O7 r. P8 L4 Y6 l+ V
    % 用data数据集训练参数矩阵形成新的HMM模型; X& r5 p0 [, `' x
    [LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));
    6 \) E) ~1 d+ N: n% 训练后那行观察值与HMM匹配度4 B+ V# _% G3 Q
    LL
    6 d$ B% O$ p; D$ d5 s% 训练后的初始概率分布# d! g6 Y( [8 g9 a
    prior2  E  p7 x8 s  p0 F
    % 训练后的状态转移概率矩阵
    # |1 X- c- i! h" F' Ptransmat2" S. D8 h3 G) o! u. |, |& B) y6 p
    % 观察值概率矩阵
    2 x; F/ ^: D# a$ F) c" Oobsmat2
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%* Z5 k& X+ ~: D2 B& C8 Z/ X! S
    % 添加部分! x$ V" |, |: ^
        [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));( S4 j' A. `) b: J, U* h  {0 T6 ]
        LL2- R0 F% p. w9 \2 H; c# w" v
        prior4# ?/ B: o3 P! i
        transmat44 Y% [0 C& C$ p+ I# C) f
        obsmat4
    , B8 j. G) p3 a/ R) [%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % use model to compute log likelihood
    : P! w/ ?' p) t% data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]3 R2 K( P/ f  ?( v
    data1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]3 s6 U1 N/ C2 Z! |" X9 O( i5 g7 H3 x
    loglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)
    ; B5 Y  z+ k( R% log lik is slightly different than LL(end), since it is computed after the final M step
    * \- _* ?0 l1 F; d. f/ W5 |% loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
    % path为viterbi算法的结果,即最大概率path
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%4 C% n) b) U! n
    % 添加部分
    , F. A$ ?: ], Iloglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)3 C; h  o/ V* U# Y
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    2 H# T9 s( I; M2 S9 ]2 O0 S
    B = multinomial_prob(data1,obsmat2);
    5 {5 A& Q6 q1 z8 C  D3 Opath = viterbi_path(prior2, transmat2, B)* k: c- T2 B3 {9 M  V8 i
    save('sa.mat');
    # q5 Q" C( i( {6 @/ D
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%# e3 W1 ]$ l* x  b4 }- g
    % 添加部分
    9 G, J/ {: e+ b, H& }" e+ F! T+ {    B2 = multinomial_prob(data1,obsmat4);
    7 ~, j; w2 M, h( ^% j! T    path2 = viterbi_path(prior4, transmat4, B2)) m; I5 U! w- p
        save('sa2.mat');
    ( j6 l+ W. M& }% n    if loglik2 > loglik " x; @7 K. ^1 K+ K
            fuhe = 2
    ( d$ d) v$ y; E    else* B. s2 R2 S' \( b3 N5 ]1 v, e
            fuhe = 13 e5 B  q9 o4 w4 {
        end   
    # v% t7 n0 G% }) l7 X) [1 Q%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ------
    运行结果
    ------
    data =
         1     2     3     1     2     2     4     2     3     1     2     7     2) l/ A  B! H, V; J
         1     2     3     6     2     2     1     4     3     1     5     3     1' {3 R; R) `: d1 L, E
         1     2     3     1     2     5     1     2     4     1     2     3     2
    1 B; r9 b  [+ w. J% E7 a5 }2 ^     1     2     7     1     2     2     1     2     5     1     2     4     1
    8 a: W1 K+ @4 Z4 F& V     5     2     3     3     5     2     1     2     3     1     2     3     6
    . |. P6 A2 K! w/ T1 @7 r     1     2     3     1     2     2     1     6     5     1     2     6     4' |$ ?  b( o. A
         5     2     3     4     4     2     1     2     3     1     2     5     6
    9 \2 \6 Z1 w: {     1     2     6     1     2     2     1     2     3     1     4     3     22 W' ?; v% j  t; q- @0 j
         1     2     3     4     2     7     1     4     3     1     7     3     3
    1 w+ [% ?+ j5 O2 v% e     5     2     3     5     2     2     1     2     3     1     2     3     4
    $ t) a& V3 @" `7 D     5     2     4     1     2     2     5     2     3     7     1     6     2

    ! B# }/ I* @% odata2 =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    8 p' G5 ~- R7 Y; Z+ ?! N     1     2     3     6     2     2     1     4     3     1     5     3     1
    & S8 f' c7 y" n3 q% }& Z) g     1     2     3     1     2     5     1     2     4     1     2     3     2! i% d. J% v8 k0 w
         1     2     7     1     2     2     1     2     5     1     2     4     1
      a4 {0 G* H' z$ I$ c  x$ U     5     2     3     3     5     2     1     2     3     1     2     3     6
    ( A* @! M! e% q8 v8 M     1     2     3     1     2     2     1     6     5     1     2     6     4
    ! k) p( v+ U% ^$ J     5     2     3     4     4     2     1     2     3     1     2     5     6/ ?7 q. c/ A* p* w5 b/ e3 s7 {
         1     2     6     1     2     2     1     2     3     1     4     3     2& U- W) m! Q1 E4 V
         1     2     3     4     2     7     1     4     3     1     7     3     3
    ' E* p4 K0 F0 v7 N     5     2     3     5     2     2     1     2     3     1     2     3     4' S  S( l* {" Z3 x' S/ [
         4     2     5     1     2     2     6     2     3     7     1     6     4
    iteration 1, loglik = -327.1004657 L' _% G% S, u; n8 b9 l
    iteration 2, loglik = -238.259812
    1 O6 a5 g4 \; N+ a- G: l  Literation 3, loglik = -232.962948
    . c& w$ F2 r) _* v# Uiteration 4, loglik = -223.3238918 P) O4 W+ g" a/ f9 ~1 T! h; R3 ^
    iteration 5, loglik = -207.630875) P4 ]4 c# K% Z& u+ I" f1 B
    iteration 6, loglik = -191.012697
    6 t- a! K. a6 L( B9 hiteration 7, loglik = -178.611546
    7 u" M, A2 c0 j. ^4 p9 a- ^/ F. m/ Miteration 8, loglik = -171.524132
    ! b( M0 X7 R' @" P6 E1 Kiteration 9, loglik = -168.626526
    . [: h' r3 X- s' l+ @+ |iteration 10, loglik = -167.387057
    7 L# K' R0 N3 P. _; xiteration 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

    " `/ L' p- U. W4 g" {; nprior2 =
        0.0000
    0 n- G5 i0 Z6 ]) M    0.0000
    2 c- Y5 n  |) d4 w. Y    1.00008 J# ~' `* P) x, a4 A- J
        0.0000" t% `2 w  m. a3 h, }: a
        0.0000

    9 A9 l" u4 e* v" M8 Y! S( s$ j' U" Xtransmat2 =
        0.0138    0.0089    0.7680    0.1060    0.1033
    * `* ?  d0 q0 B  U$ E5 ~' R# d6 K    0.7811    0.0000    0.0199    0.0067    0.1923' o) F  P  X8 S1 N. i1 x( e9 D+ x
        0.0000    0.9936    0.0000    0.0064    0.0000: ^( G+ n% [& r7 @
        0.1686    0.2604    0.2242    0.3398    0.0070
    9 |* Z  g' X2 m9 b) I    0.0053    0.0406    0.8350    0.1184    0.0007

    ( M+ K  `: _0 m# _. @& W: n( \obsmat2 =
        0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.03511 e& }3 k8 {5 j: g- m" o' z
        0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.0228
    . d4 Y( f! A4 {: }6 N5 D6 I* e    0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.00009 `) q( v; O6 H7 `
        0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.0055
    8 s, D0 i6 V0 S5 u/ J  T/ |# Z6 N    0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
    iteration 1, loglik = -277.738670: u' M4 u5 I( j5 o# N, H* Y
    iteration 2, loglik = -242.163247* d' T% c0 k& [5 }, ]& l
    iteration 3, loglik = -238.321971
    9 D8 m; _" ]4 X7 O  p1 f8 Diteration 4, loglik = -233.1667464 p  y9 \5 R. U+ C0 v1 X
    iteration 5, loglik = -225.682259" r$ R9 E. @% C, h2 Q' t
    iteration 6, loglik = -214.560296
    - K# V) b1 m2 ]# y- {. `: _iteration 7, loglik = -201.182015$ s" X8 m7 g. M8 T# o3 Z
    iteration 8, loglik = -189.427453! g/ V2 D; B3 R  X
    iteration 9, loglik = -179.156352
    % {7 ~+ L  R- }+ Viteration 10, loglik = -171.744096
    - T! |- ^( S7 L" a- ~/ a# z, kiteration 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
    ( e" C# K/ ^! |1 i' U8 Z7 K# c
    prior4 =
        0.0000: N1 Y$ k" F, R- x
        0.9982+ h3 ^" |+ ?' x) Y, p& ~, y
        0.0004
    9 o6 r$ O2 N, [1 r: Y  V) l    0.0014
    ! i! X: Q2 M2 F2 Q    0.0000

    / W8 Z+ O) J) |9 T% Q6 Mtransmat4 =
        0.0873    0.5277    0.2799    0.1007    0.00452 n2 h9 Z- x5 q/ [2 B% {
        0.0002    0.0000    0.0005    0.0000    0.9994
    ( D+ M% O0 m# Q  B3 t8 Q    0.0180    0.0000    0.0118    0.0011    0.9692! I6 ?' z9 f9 W* X" c
        0.0436    0.0226    0.0810    0.0219    0.8310  L6 u8 E4 _; g" l5 L+ G+ \; U
        0.9746    0.0056    0.0003    0.0195    0.0000

    $ y' W' _3 ]8 E" B9 lobsmat4 =
        0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.0770- ~$ j( N( }5 U
        0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.0000& e! W3 Q7 j/ e4 V) E- m
        0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.00015 r' h/ e0 j6 V9 V$ J" G
        0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.08022 q, H: c6 A: c6 X4 r+ W
        0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225

    # z- q7 _0 F0 n  I, b$ h, odata1 =
         5     2     4     1     2     2     5     2     3     7     1     6     2
    3 L5 ~1 _& _) d2 I# s
    loglik =
      -19.2351
    3 K# J$ t! t( e+ O5 `1 A
    loglik2 =
      -21.0715
    ' |0 ]6 d+ R  ?" U* ?
    path =
         3     2     5     3     2     1     3     2     1     5     3     2     1

    $ U) J4 X8 k0 ]. t/ G% @path2 =
         2     5     1     2     5     1     2     5     1     1     2     5     1
    / F$ ?! P8 K$ D! y) L, w
    fuhe =
         1

    6 D0 k5 h8 k' d7 ]
    ' E5 C3 i( U. C1 a; I
    9 q* a* s! a! v

    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-27 05:41 , Processed in 0.337402 second(s), 55 queries .

    回顶部