QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1728|回复: 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
    ' [$ F  c/ [3 ?; R+ G; H
    隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱
    # b, T* n7 F4 J6 d, r
    % ①定义一个HMM并训练这个HMM。: V! k6 D: F! r3 [! z  Y; H
    % ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。+ O$ A$ i! T! V2 d9 F+ \# L8 ~0 i( J, T
    % 修改:旺齐齐
    ' R: i. O% }/ l+ O. I8 s# A% 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。
    & y/ w: A. t5 x%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % O:观察状态数5 H; ?6 y5 h+ `6 k7 u0 p  ?8 n3 K
    O = 7;
    * ?+ ~, u+ ~9 L' WO2 = 7;
    . h3 C3 q$ m7 u3 g% C% Q:HMM状态数
    4 {0 L- i% G5 I! ]Q = 5;
    / a- f' ]( a; L5 v# N, q" S1 QQ2 = 5;( Q7 i6 M$ \& e1 I) r8 v
    %训练的数据集,每一行数据就是一组训练的观察值
    , ]# @7 K( k% j" W0 rdata=[1,2,3,1,2,2,4,2,3,1,2,7,2;) j' m# P( h3 H% Y
          1,2,3,6,2,2,1,4,3,1,5,3,1;' X# M& t9 o: }; L( U6 L5 T8 F- a
          1,2,3,1,2,5,1,2,4,1,2,3,2;4 L' D8 q7 ^8 k" A( x
          1,2,7,1,2,2,1,2,5,1,2,4,1;( j$ V* Y4 w; d& K
          5,2,3,3,5,2,1,2,3,1,2,3,6;. X% n% b8 z( z) W
          1,2,3,1,2,2,1,6,5,1,2,6,4;
    # D9 S) }: ~5 J/ K& @" U4 j4 r      5,2,3,4,4,2,1,2,3,1,2,5,6;
    ( {0 W- E, ~, K) e% P% S      1,2,6,1,2,2,1,2,3,1,4,3,2;! f3 Q2 \' d/ k- X4 w2 m9 q
          1,2,3,4,2,7,1,4,3,1,7,3,3;8 O- y5 n5 Z8 A$ p, I9 W; J; ^
          5,2,3,5,2,2,1,2,3,1,2,3,4;
    1 y4 D  E9 G$ |2 U. P$ C# ^2 g: j      5,2,4,1,2,2,5,2,3,7,1,6,2;]
    " c/ ^7 G9 X( n! q8 T$ ]2 V1 w
      data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;
    " W0 w! ~( L; [5 |, Z9 y          1,2,3,6,2,2,1,4,3,1,5,3,1;3 l& a& T$ l6 ]; a8 n- o4 s
              1,2,3,1,2,5,1,2,4,1,2,3,2;! L7 H/ k; i& d
              1,2,7,1,2,2,1,2,5,1,2,4,1;
    ; ?! S8 P2 K7 F. B# e! t          5,2,3,3,5,2,1,2,3,1,2,3,6;
    ) M' K# b: o- ?! V+ P% w( r          1,2,3,1,2,2,1,6,5,1,2,6,4;
    1 ]. E2 [  H' k          5,2,3,4,4,2,1,2,3,1,2,5,6;' I' c) b& N3 x  v/ i7 v( ?7 T
              1,2,6,1,2,2,1,2,3,1,4,3,2;& [4 L* _* z1 w+ _5 a# E/ v# H/ _
              1,2,3,4,2,7,1,4,3,1,7,3,3;
    , I* t  M* C0 L# U; J8 v          5,2,3,5,2,2,1,2,3,1,2,3,4;
    6 D+ t" P# I& M* R. P" A          4,2,5,1,2,2,6,2,3,7,1,6,4;]
    % initial guess of parameters
    2 V4 I- f( B. z5 p9 G* }% 初始化参数* G, e  V1 [/ V
    prior1 = normalise(rand(Q,1));* C0 |1 t5 b. ~  t
    transmat1 = mk_stochastic(rand(Q,Q));8 q) |0 A, X4 P2 a( I- s
    obsmat1 = mk_stochastic(rand(Q,O));
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    2 x  K% w( c6 W" S: I) F: p$ o- P% 添加部分2 n5 o$ B* V* x5 D; ^
        prior3 = normalise(rand(Q2,1));
    7 R3 N0 h/ W- v, J8 O$ K/ z8 m    transmat3 = mk_stochastic(rand(Q2,Q2));
    . Q1 [& Q# O) p7 H& z    obsmat3 = mk_stochastic(rand(Q2,O2));7 a8 D8 R# U; E; F6 N
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % improve guess of parameters using EM
    $ P. }7 {; v% ?* ]% 用data数据集训练参数矩阵形成新的HMM模型2 a5 v' J: \) D: V2 p
    [LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));: e% A( O) I& j5 V  Q2 N
    % 训练后那行观察值与HMM匹配度
    3 E# i$ a' C6 c1 b. ^) y2 ]' fLL1 @6 O1 a$ ^6 ]
    % 训练后的初始概率分布
    ' V, x3 w/ m6 d$ v& l8 k- I; vprior2, S2 \. |- d' {+ ~" _% G" A
    % 训练后的状态转移概率矩阵
    3 D- p( x# Y  P2 N0 Y% Otransmat23 S7 ^/ z* ^& N& O
    % 观察值概率矩阵
    # v. D# g" b1 S! C/ }  ?obsmat2
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%- U" \! P) e0 M
    % 添加部分; x$ F. Q4 i' A5 W. k1 T0 N
        [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));
    ! W6 U; k0 [# D& J" o( W) Q    LL2
    : t- z% H' f" A3 A7 B# m$ |    prior42 d1 }+ W1 w% m0 ]" v. b8 x6 e# n
        transmat42 k: ^1 d7 r2 W- k, l
        obsmat4( T: a. P* _- ^" {. n
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % use model to compute log likelihood
    & L; Z$ ]2 H4 h. o; R# T; e% data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]1 B7 ^0 M5 F8 |$ H
    data1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]
    9 X' Y2 B1 q6 Uloglik = dhmm_logprob(data1, prior2, transmat2, obsmat2), l. ?5 P& q$ L. N+ ^. }
    % log lik is slightly different than LL(end), since it is computed after the final M step0 T, R1 z6 x# r! U' w
    % loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
    % path为viterbi算法的结果,即最大概率path
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%, u: ]* C6 Z: [! h0 L# C5 x( ]8 |
    % 添加部分+ K3 d" _$ T. O, r
    loglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4), j0 h2 f5 d: |" W( J4 s. @
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

      j" O# x6 h4 ~% z0 b# LB = multinomial_prob(data1,obsmat2);
    % ^/ u6 k; d  z; E0 b: ]; S3 X, dpath = viterbi_path(prior2, transmat2, B)
    3 ~! b; \" O# B  Csave('sa.mat');
    ) g3 c" S, e% r* O+ u3 Q
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ; E  |5 W8 L8 |. e* ?! V% 添加部分
    " y1 [1 P; D! p/ |2 e) i    B2 = multinomial_prob(data1,obsmat4);0 d7 j5 P5 K: Q
        path2 = viterbi_path(prior4, transmat4, B2)
    ! r" D( v! C/ r% G$ R    save('sa2.mat');
    9 P% c) U" i; X, M5 ~/ T- o0 z    if loglik2 > loglik
    $ E- C2 C* [4 `7 N  A        fuhe = 2
    4 V$ b; }9 K( V% g8 A    else
    8 l0 h9 R" X: e: K, k( M        fuhe = 1
    1 F3 y2 v6 x7 w7 |9 R' _    end    8 c" {0 }6 s! m$ v
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ------
    运行结果
    ------
    data =
         1     2     3     1     2     2     4     2     3     1     2     7     22 s) v3 [1 n6 I  v& d
         1     2     3     6     2     2     1     4     3     1     5     3     1
    5 t- j$ e4 }" S( b9 R     1     2     3     1     2     5     1     2     4     1     2     3     2+ q5 ?, n) T/ T
         1     2     7     1     2     2     1     2     5     1     2     4     18 L6 X( J& b8 ]  N+ d3 z
         5     2     3     3     5     2     1     2     3     1     2     3     6$ [  ?0 T6 Z" _
         1     2     3     1     2     2     1     6     5     1     2     6     47 ~, e5 ]  x8 u4 w6 y
         5     2     3     4     4     2     1     2     3     1     2     5     6. V; {" q3 S" D* z- V
         1     2     6     1     2     2     1     2     3     1     4     3     2
    ( {+ L, n  J4 n0 v; _" j6 _     1     2     3     4     2     7     1     4     3     1     7     3     3! ?% u0 Q& x+ N$ ?
         5     2     3     5     2     2     1     2     3     1     2     3     4- Q9 y+ S& M1 m: |$ {
         5     2     4     1     2     2     5     2     3     7     1     6     2
    ( e2 n/ a# i5 l$ s- {" g4 u
    data2 =
         1     2     3     1     2     2     4     2     3     1     2     7     2* [& H3 S$ e8 [* w1 _. H" v1 O  F
         1     2     3     6     2     2     1     4     3     1     5     3     1
    5 a, b5 L5 _. h2 y     1     2     3     1     2     5     1     2     4     1     2     3     23 t+ a9 |# \* {( V
         1     2     7     1     2     2     1     2     5     1     2     4     1
    0 b9 X  m; T' s$ m* M  Z     5     2     3     3     5     2     1     2     3     1     2     3     6' ?3 j& z! g0 h  w5 {8 y- a
         1     2     3     1     2     2     1     6     5     1     2     6     4% v+ O( @. B6 [5 B' x" k( D. [
         5     2     3     4     4     2     1     2     3     1     2     5     6
    : u, J  j3 Z* n$ Q     1     2     6     1     2     2     1     2     3     1     4     3     2+ e' z6 a: }: D% p9 F5 F8 m5 R
         1     2     3     4     2     7     1     4     3     1     7     3     32 V# _5 o+ E5 N" x
         5     2     3     5     2     2     1     2     3     1     2     3     4
    ) Z3 I0 U" M- |5 x& j/ @     4     2     5     1     2     2     6     2     3     7     1     6     4
    iteration 1, loglik = -327.100465+ {8 ?0 L7 t. c) ^
    iteration 2, loglik = -238.259812
    % ]) G' Q! D- D' `, jiteration 3, loglik = -232.962948! g- M& K/ U! a' Z& G
    iteration 4, loglik = -223.323891
    $ _3 ?9 j: Q: g0 e+ l& piteration 5, loglik = -207.630875' D/ y1 t* B* g2 Q8 u
    iteration 6, loglik = -191.012697! x# A; ~9 K4 d% r1 t
    iteration 7, loglik = -178.611546
    ; g: ^$ Q" T4 o4 y( N- }iteration 8, loglik = -171.524132
    : Q6 v3 i3 X6 h6 W9 r, ]* _2 _iteration 9, loglik = -168.626526
    3 h) s1 x! _4 k' ~  d" O  siteration 10, loglik = -167.387057
    & X+ M- x: d  V; D/ ]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

    ( D  r/ M$ Z" N/ H4 I" d' n" U+ _+ tprior2 =
        0.0000
    * [  H: y8 y) |, h/ n& U    0.0000  j/ B( O5 X# T
        1.0000) E* k* m' _3 Z$ D  r
        0.0000; ~" k# J; f" s! k1 |
        0.0000
    1 d0 ]! y% J) }# L# Q3 |; ~
    transmat2 =
        0.0138    0.0089    0.7680    0.1060    0.1033# P+ E1 |7 U9 U/ y' _1 F! R" f
        0.7811    0.0000    0.0199    0.0067    0.1923
    # n& c0 c' O" B% C    0.0000    0.9936    0.0000    0.0064    0.0000$ W$ Y2 _; ~; G6 x; E: _
        0.1686    0.2604    0.2242    0.3398    0.0070
    ( r& N2 j/ L: }  F9 W* N, X7 X    0.0053    0.0406    0.8350    0.1184    0.0007
    3 n1 V( {' q- M) e* Z0 K! p! r
    obsmat2 =
        0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.0351& N0 h4 M5 O, ]3 w- J
        0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.0228
    / d" r+ u' C$ Y    0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.00002 a& }% I' J) M5 ^1 D  U$ G) v' t
        0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.00558 r$ V0 S/ _% ~% t6 W) B
        0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
    iteration 1, loglik = -277.738670
    6 E7 m$ }/ a2 t- S1 hiteration 2, loglik = -242.163247
    2 N0 z5 f, b6 N. Uiteration 3, loglik = -238.321971% T# F$ J. i+ ^$ p7 r/ n& ?
    iteration 4, loglik = -233.166746
    ( [# G& f) e. U6 F* U: I* piteration 5, loglik = -225.6822593 h) i/ d7 E6 @8 G, U5 r7 P
    iteration 6, loglik = -214.5602964 i2 E4 S& j$ v* f
    iteration 7, loglik = -201.182015
    * z4 t& f# m$ l; E0 Eiteration 8, loglik = -189.427453) Y& w. N" j- ^
    iteration 9, loglik = -179.1563523 ~! V$ @) {: T% k) H
    iteration 10, loglik = -171.744096, [5 @3 ?" i+ E: t* A2 N
    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
    ( K5 p8 y) B. l, E$ m
    prior4 =
        0.0000) A2 [2 |, l+ E. D3 Q. Z. U4 N
        0.99828 g& _+ m  Y3 Y7 U9 U7 j8 [; D
        0.0004
    ( S3 c( \& f3 ^8 @# N, {9 q4 H# S, ^    0.0014
    + \: e% {0 d- w% c    0.0000

    $ [9 F) w  l3 mtransmat4 =
        0.0873    0.5277    0.2799    0.1007    0.0045, S1 y) m7 w5 k$ `( D
        0.0002    0.0000    0.0005    0.0000    0.9994* C* V; c( Y4 E9 s+ ]# N% p5 i' W9 j
        0.0180    0.0000    0.0118    0.0011    0.96922 S3 O- s: @( Y0 R! Q! U  A9 J
        0.0436    0.0226    0.0810    0.0219    0.8310
    ' D9 y) K* V5 @: Q( m    0.9746    0.0056    0.0003    0.0195    0.0000

    * o9 [$ W$ u/ h2 G6 qobsmat4 =
        0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.0770
    + x1 E+ S7 k$ E  U    0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.0000
    , B; k) p$ y& @    0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.00015 h  ^4 E) k& f$ R. A% F7 M
        0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.0802% ]1 h$ j+ }* P. e& l) i1 L5 e, W
        0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225

    ) L1 k  o9 p1 \: B% I8 \data1 =
         5     2     4     1     2     2     5     2     3     7     1     6     2
    ! `5 k$ P+ Q( q7 V, N! v
    loglik =
      -19.2351
    6 f$ S6 z. A- N4 ^% h8 ^! R
    loglik2 =
      -21.0715

    4 n& a3 |5 ^' q7 U9 ipath =
         3     2     5     3     2     1     3     2     1     5     3     2     1
    8 M9 K4 W7 p2 U4 Q/ @* `2 L" Y
    path2 =
         2     5     1     2     5     1     2     5     1     1     2     5     1
    " {  `; k9 Z; V1 [  K' Y/ J" a" ^
    fuhe =
         1
    9 ^, W- F! X/ P7 M
    - m% X# h! p1 I- b0 U, c0 @0 k# I
    8 ^# e! q7 {( ^+ d8 }5 {. y

    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-21 15:29 , Processed in 0.535617 second(s), 55 queries .

    回顶部