QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1724|回复: 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
    ; k9 y9 t# T/ J; @7 ?. u
    隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱7 O7 o0 F5 W2 e; P0 J
    % ①定义一个HMM并训练这个HMM。* E' _3 I9 z7 V% {$ {
    % ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。1 p0 s' ~) E! [& ]6 i" r
    % 修改:旺齐齐5 \7 I; O7 l! ?4 A
    % 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。
    1 B* L+ T# q, o, f%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % O:观察状态数
    - g# P" a3 W$ p8 HO = 7;* ^) h" c9 A1 C/ [5 q
    O2 = 7;
    ) t' m, i! {$ F$ @& G- M, h% Q:HMM状态数3 n. Q/ Z1 C9 A
    Q = 5;
    , l* j6 {. v9 o' N" {: S+ ]! W/ J: JQ2 = 5;
    1 P: c8 p6 c& E  F$ D8 l% l%训练的数据集,每一行数据就是一组训练的观察值' u3 X1 Q& g1 C* C$ I. Y' D! Q: \
    data=[1,2,3,1,2,2,4,2,3,1,2,7,2;. t% b: ~* S6 X5 u  V
          1,2,3,6,2,2,1,4,3,1,5,3,1;
    1 C, p" ?9 @/ [6 n4 n, s9 f) ]      1,2,3,1,2,5,1,2,4,1,2,3,2;
    $ \, D' V! ]/ S% O3 V      1,2,7,1,2,2,1,2,5,1,2,4,1;# Z/ d, ~( g3 F! l8 |8 F: R* p# L1 ]
          5,2,3,3,5,2,1,2,3,1,2,3,6;& V9 A/ G* E' L7 j8 b- P4 N: c
          1,2,3,1,2,2,1,6,5,1,2,6,4;
    : Y* B2 I! b1 [$ u! X+ y6 i      5,2,3,4,4,2,1,2,3,1,2,5,6;4 e) ]  m2 o  E
          1,2,6,1,2,2,1,2,3,1,4,3,2;
    % F: {3 p7 w# t5 o2 n      1,2,3,4,2,7,1,4,3,1,7,3,3;
    # u) I: P6 O- ]& ]2 O, i      5,2,3,5,2,2,1,2,3,1,2,3,4;
    * l# x: E4 x0 r* e      5,2,4,1,2,2,5,2,3,7,1,6,2;]
    : `5 E: c8 X! i8 o& P
      data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;
    8 {9 S- z+ K( g( r! D( ]          1,2,3,6,2,2,1,4,3,1,5,3,1;
    / Y; }! k  I* I- ?/ r1 S/ X* v          1,2,3,1,2,5,1,2,4,1,2,3,2;* L% I4 w+ {8 `; }
              1,2,7,1,2,2,1,2,5,1,2,4,1;0 z  n9 s) D0 P2 E
              5,2,3,3,5,2,1,2,3,1,2,3,6;2 a& p' l6 _& _7 M  }7 @
              1,2,3,1,2,2,1,6,5,1,2,6,4;
    7 M& g- v; p" ]1 S* A          5,2,3,4,4,2,1,2,3,1,2,5,6;4 d4 g; w" F  n8 C
              1,2,6,1,2,2,1,2,3,1,4,3,2;% _9 K' S4 y" e
              1,2,3,4,2,7,1,4,3,1,7,3,3;
    ! ~& f' O, r: u- O          5,2,3,5,2,2,1,2,3,1,2,3,4;- U* F1 ?7 D% O
              4,2,5,1,2,2,6,2,3,7,1,6,4;]
    % initial guess of parameters4 V% o& ^1 w  Z) O. r- X- i+ x
    % 初始化参数
    ) `( Q. m8 _" C2 q- oprior1 = normalise(rand(Q,1));. p7 h/ a' q& j, o- r/ S, T
    transmat1 = mk_stochastic(rand(Q,Q));
    & ^% v2 C* I8 ~obsmat1 = mk_stochastic(rand(Q,O));
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$ l7 N  K7 ?* _- A/ k) @
    % 添加部分* x# \  p" d) ?7 V# W
        prior3 = normalise(rand(Q2,1));: ^2 i5 E. e/ t1 {7 M4 P
        transmat3 = mk_stochastic(rand(Q2,Q2));+ [1 T' O/ a5 p1 d
        obsmat3 = mk_stochastic(rand(Q2,O2));
    , m) e1 u! j6 j3 [" `" `& T1 S  z& n) m%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % improve guess of parameters using EM
    6 x3 I- b+ l! c% 用data数据集训练参数矩阵形成新的HMM模型
    : I/ {4 x( s3 ?' f8 f/ [[LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));
    + d; ]; g9 J" g7 `, d; a% 训练后那行观察值与HMM匹配度
    : Y' j4 K$ U- C' f$ LLL
    & l; K, J9 i: ]% 训练后的初始概率分布3 h) h$ k" M; q8 V& |8 |$ U  g
    prior2
    % k) [' _0 k4 N# {4 q$ G; s% 训练后的状态转移概率矩阵" |7 v: L; J9 ~/ W9 A
    transmat2
    8 f- X  ~* j- \* s1 O% 观察值概率矩阵
    * O( J4 t  k  hobsmat2
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    3 T4 ?( q8 |8 f# L, U5 I) c" [% 添加部分) v! _# C! {% [2 h1 H- Y+ S3 V
        [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));
    # s; J1 d" W* A' Q* R  }5 e& z; k    LL2! x# G8 g! L5 v
        prior4
    / C) I8 F3 @* v6 ]% }    transmat4
    + {0 f" [! d. I! `6 C7 l    obsmat4! w& Y9 L% ?) Y6 T2 S# o
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % use model to compute log likelihood3 F6 q0 q2 n! a! f9 j3 h! [
    % data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]
    6 m6 C: I, N. F: ^5 U" sdata1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]
    . e" c: H9 ~" Cloglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)" Y! B" c5 e, h6 ^
    % log lik is slightly different than LL(end), since it is computed after the final M step
    ( A. ^1 F  O% r% loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
    % path为viterbi算法的结果,即最大概率path
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    5 v  Z5 \9 G$ ]5 j. ^& a% 添加部分' r# S& h  N( o* p0 E
    loglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)5 O6 m5 R' [5 _
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

      r: b. x( T0 }) vB = multinomial_prob(data1,obsmat2);! T) V. I" V: o$ L; F7 T4 s( _
    path = viterbi_path(prior2, transmat2, B)4 d3 s: Z+ t% y/ r
    save('sa.mat');

    1 H' T; U) z; z; a%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    + y% e/ ]% L# w( H( p; f% 添加部分7 _4 U! g& _( N4 q- u
        B2 = multinomial_prob(data1,obsmat4);9 G, j" [! s$ L1 M) n  c3 Z) Z
        path2 = viterbi_path(prior4, transmat4, B2)1 i2 N% b7 F2 W$ v5 X# N; C  W, k
        save('sa2.mat');' O: N8 v* h! M3 p7 z1 t  G
        if loglik2 > loglik
    / _$ k( k, K" X$ d) z4 E; B        fuhe = 2+ A) j) j. j& u5 _
        else
    & Z7 o$ }" o& M0 P6 J2 ~        fuhe = 1, P1 Z9 }7 n; R8 z, ?& b$ e
        end    , e7 D' B( @: b# {* q
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ------
    运行结果
    ------
    data =
         1     2     3     1     2     2     4     2     3     1     2     7     2( k) T2 e9 I+ z' o. [; m
         1     2     3     6     2     2     1     4     3     1     5     3     1
    9 B2 c2 X0 [, A9 M1 T     1     2     3     1     2     5     1     2     4     1     2     3     2
    6 J# \. k% U1 k" X8 {' |7 U     1     2     7     1     2     2     1     2     5     1     2     4     1
    ! E4 T* P4 w" y& `3 ]  B     5     2     3     3     5     2     1     2     3     1     2     3     6
    " n% U5 ]- W( Q: `     1     2     3     1     2     2     1     6     5     1     2     6     4+ W- b  A5 b! b3 Q9 G7 D3 m4 [
         5     2     3     4     4     2     1     2     3     1     2     5     6
    3 O9 \8 A9 i% B# E1 q7 h     1     2     6     1     2     2     1     2     3     1     4     3     2
    ; i% W0 `' U! M( z) P     1     2     3     4     2     7     1     4     3     1     7     3     3  j6 b' {1 v# ~1 l; K1 {6 e
         5     2     3     5     2     2     1     2     3     1     2     3     4
    : D5 L, `, L6 ^9 m; i0 K     5     2     4     1     2     2     5     2     3     7     1     6     2
    ' G$ s3 z3 G/ L# R  |2 v
    data2 =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    3 }' V9 L% r, e     1     2     3     6     2     2     1     4     3     1     5     3     14 y6 K1 o5 d+ u8 e6 g* F2 v; c
         1     2     3     1     2     5     1     2     4     1     2     3     20 C/ i# S3 e1 k% }) e5 I* X" v3 t
         1     2     7     1     2     2     1     2     5     1     2     4     1+ g- v' [- I7 X; X
         5     2     3     3     5     2     1     2     3     1     2     3     6
    8 S1 _, N2 I, j5 m5 x7 {3 Z     1     2     3     1     2     2     1     6     5     1     2     6     4& F# i$ x1 O5 u: o& t
         5     2     3     4     4     2     1     2     3     1     2     5     6
    6 B5 H* q- \* Z2 e     1     2     6     1     2     2     1     2     3     1     4     3     2
    7 ]' X9 J9 @, C* q$ C     1     2     3     4     2     7     1     4     3     1     7     3     3
    0 u) T' o& l0 O: M& x     5     2     3     5     2     2     1     2     3     1     2     3     4
    3 ]6 v, {) a" n: s$ M- t1 S     4     2     5     1     2     2     6     2     3     7     1     6     4
    iteration 1, loglik = -327.100465) q4 D6 |1 ]/ d7 T' w! l* O
    iteration 2, loglik = -238.259812& E0 A) |- o3 X) x% K
    iteration 3, loglik = -232.962948  g9 \; H+ B0 y1 x9 e# I  C
    iteration 4, loglik = -223.323891: r  W, \' V  t  Z- L/ V4 a9 V
    iteration 5, loglik = -207.630875
    ) ~, D) \* j1 x6 h- Citeration 6, loglik = -191.012697
    ) z1 Q* s, Z3 e+ d+ q2 F% hiteration 7, loglik = -178.611546
    8 v* F( |. Z$ I/ Kiteration 8, loglik = -171.524132
    - a. [0 S) x6 |4 [2 e  g; B$ Piteration 9, loglik = -168.626526
    , p. F) c3 m  o* u# {  Literation 10, loglik = -167.387057
    / i/ j# c- l% d  x6 W% }  z# o' {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

      ]: a9 b+ C, ~# l0 ~9 l5 k' Gprior2 =
        0.0000
    3 c$ y/ i5 g( P# G* I2 a    0.0000; A% a8 i9 C: j- y$ I) o6 G+ N/ z
        1.0000
    7 J$ q* g/ P" ^5 A    0.0000
    / c/ A8 M$ _: w    0.0000
    " ~; Z, `9 S( n* [6 _
    transmat2 =
        0.0138    0.0089    0.7680    0.1060    0.1033+ C* _% h, A% B2 ^  Y4 f+ W+ S
        0.7811    0.0000    0.0199    0.0067    0.1923
    4 O# v( S/ ]  |: W: g; o    0.0000    0.9936    0.0000    0.0064    0.0000
    & y0 Y0 N8 L6 u$ Q$ A    0.1686    0.2604    0.2242    0.3398    0.0070
      [$ L3 P6 ^  K5 R" u. k    0.0053    0.0406    0.8350    0.1184    0.0007
    ' m+ z  [, ^5 K* b8 u% Z+ S2 p& t* T
    obsmat2 =
        0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.0351
    ; ^  P& O) f! T, Q( V    0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.02286 v1 ~  V+ |5 N6 B4 j: ]$ E/ m
        0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.0000
    3 L+ J0 T( O- A2 {7 A    0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.0055
    ! d( }8 P( V7 d( m# a, v    0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
    iteration 1, loglik = -277.738670- e8 y) D8 E  ]
    iteration 2, loglik = -242.163247
    " T) Y: }/ `, O! J0 k. J, @" ?* Citeration 3, loglik = -238.321971
    ' b6 P0 M6 Z8 h" N4 Literation 4, loglik = -233.166746
    9 o2 |- j# b( D2 M  {" ]" miteration 5, loglik = -225.6822594 _) p7 g' r2 B* C
    iteration 6, loglik = -214.560296  T% j. k3 u3 e9 U& J' r
    iteration 7, loglik = -201.182015: U0 P" J% L- o- k' V( f
    iteration 8, loglik = -189.427453; J% v# w9 g7 A/ Q$ }5 N2 K2 U
    iteration 9, loglik = -179.156352
    7 P* R7 O' \+ c9 G% w; T% m7 g/ j6 aiteration 10, loglik = -171.7440960 k, g# F. w6 U' h- T
    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
    / w  d& p" \% f' W* M
    prior4 =
        0.0000& h( E% ^* c# v1 g1 D
        0.9982
    0 {. I1 a4 S) M7 q( R    0.0004
    ; K  V7 l* a2 {2 _% C* F" U    0.0014/ R% U$ b8 f& _2 |* t/ a* F
        0.0000

    # v3 x, A( v! X. u; F/ dtransmat4 =
        0.0873    0.5277    0.2799    0.1007    0.0045  \2 p% O/ C, b
        0.0002    0.0000    0.0005    0.0000    0.9994
    & ~& v) |% [5 Z$ g4 o    0.0180    0.0000    0.0118    0.0011    0.9692
    : C3 r, a; d2 s+ S/ s! b' T. B    0.0436    0.0226    0.0810    0.0219    0.8310- u" m  X* e4 u
        0.9746    0.0056    0.0003    0.0195    0.0000

    5 y0 E0 z4 k6 ^5 _obsmat4 =
        0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.0770) [( q! n+ [, @9 }/ H
        0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.0000( W5 U( t& b  H( L& I
        0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001. E2 C7 m  G/ g6 {1 P) `
        0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.0802
    - t; C) k( S3 K; z  U; Q/ s! `    0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225

    * R2 s6 _+ f& f' f/ [, B( L7 C! cdata1 =
         5     2     4     1     2     2     5     2     3     7     1     6     2
    : [3 K0 I7 U$ Y3 L
    loglik =
      -19.2351

    ) R1 V2 m8 H9 Q6 xloglik2 =
      -21.0715

    : D# H+ s; q  w. F: [  Gpath =
         3     2     5     3     2     1     3     2     1     5     3     2     1

    9 d2 Y2 T9 v* Y* g# zpath2 =
         2     5     1     2     5     1     2     5     1     1     2     5     1
    1 H" X: T1 i" \
    fuhe =
         1
    & N1 g2 T" l! v

      d) x% M, P' [
    * M; Y! t, W  e4 s6 s$ m

    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-4-18 20:29 , Processed in 0.475342 second(s), 56 queries .

    回顶部