QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1749|回复: 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
    , m) Z  H7 N2 R7 ]
    隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱
    6 q4 Q0 T4 E6 z; G' q. @
    % ①定义一个HMM并训练这个HMM。8 ~* i, I: _, C( h& M+ q, Q
    % ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。) o% e) ]! S9 T& d1 q6 ^
    % 修改:旺齐齐
    # [  L) y& G6 @0 Z9 |% 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。4 _& c+ Z9 l/ G# p; Q" T2 D
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % O:观察状态数  \7 d: J# w& l  @0 X2 f( Q$ Z' c
    O = 7;
    9 r- g. u* I4 t: p! ?6 l' BO2 = 7;( L2 G. `$ B" t
    % Q:HMM状态数
    & L, l7 c$ ^- i9 mQ = 5;
    3 l* M2 Q0 K) p8 ^Q2 = 5;$ L9 y: [0 x) V7 R; w
    %训练的数据集,每一行数据就是一组训练的观察值
      S- j" d7 y3 H9 ]. Jdata=[1,2,3,1,2,2,4,2,3,1,2,7,2;
    9 n$ A  c  }  Y: u6 V      1,2,3,6,2,2,1,4,3,1,5,3,1;" {# p; B2 R9 v. S: g1 ?; `
          1,2,3,1,2,5,1,2,4,1,2,3,2;2 d2 v5 N1 v) y& a9 Y2 S
          1,2,7,1,2,2,1,2,5,1,2,4,1;
    : b2 F( F2 w, a6 h      5,2,3,3,5,2,1,2,3,1,2,3,6;* p3 N0 n1 M8 N# E: S* I( Y6 n' L, f! ^
          1,2,3,1,2,2,1,6,5,1,2,6,4;
    ; K# |7 S3 m: p      5,2,3,4,4,2,1,2,3,1,2,5,6;. ?% b2 A2 A. K2 V' Q
          1,2,6,1,2,2,1,2,3,1,4,3,2;
    * ~, j( u, Q0 T      1,2,3,4,2,7,1,4,3,1,7,3,3;$ J  g$ F6 ]7 G" c" w6 B: o1 m$ v
          5,2,3,5,2,2,1,2,3,1,2,3,4;% @) u* G$ [+ J0 z% q6 z% v, n
          5,2,4,1,2,2,5,2,3,7,1,6,2;]
    2 T. |$ `4 V  Y" v( K- M: p1 j
      data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;) k4 C6 c" z& ^6 Y
              1,2,3,6,2,2,1,4,3,1,5,3,1;
    3 f- O! G+ G5 z. L% E" U          1,2,3,1,2,5,1,2,4,1,2,3,2;
    + Q9 g9 O, N8 J: b8 u/ X2 p- c          1,2,7,1,2,2,1,2,5,1,2,4,1;* g! m# [8 m1 \  r6 o4 n7 |
              5,2,3,3,5,2,1,2,3,1,2,3,6;
    1 t. E! y" s8 N0 \7 |          1,2,3,1,2,2,1,6,5,1,2,6,4;
    : M( }9 p' L; h0 S& T          5,2,3,4,4,2,1,2,3,1,2,5,6;  [! e, Q  v0 B% ~' \7 J0 ?
              1,2,6,1,2,2,1,2,3,1,4,3,2;
    ; q8 |" _0 H$ ]5 B          1,2,3,4,2,7,1,4,3,1,7,3,3;
    " }6 Y# `3 e. F. v1 S# Q! D* W          5,2,3,5,2,2,1,2,3,1,2,3,4;" ^8 u: b) P. i5 V
              4,2,5,1,2,2,6,2,3,7,1,6,4;]
    % initial guess of parameters# ]$ f5 z9 J4 d5 r  b& r! B# [/ ^! q
    % 初始化参数
    7 O" g  p$ _8 J* Nprior1 = normalise(rand(Q,1));
    4 U% ?4 o& s9 ~0 h# P( K1 W* q4 a1 etransmat1 = mk_stochastic(rand(Q,Q));
    $ v. l& M1 j5 |! Q9 x+ W, e$ Vobsmat1 = mk_stochastic(rand(Q,O));
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%; d$ G) m3 e  |0 {/ J; |1 u
    % 添加部分
    6 r# n( p3 m3 t    prior3 = normalise(rand(Q2,1));: v8 t8 @  p( t6 ?" Q& K/ Y
        transmat3 = mk_stochastic(rand(Q2,Q2));
    , f7 I7 k0 `4 U    obsmat3 = mk_stochastic(rand(Q2,O2));
    ! y8 j! ?0 ]9 m" [3 u%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % improve guess of parameters using EM* `) T, e$ d/ k
    % 用data数据集训练参数矩阵形成新的HMM模型) e& e$ [5 _! z1 D$ V$ ^
    [LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));
    2 w2 j# Q, Z& [$ k( \% 训练后那行观察值与HMM匹配度
    8 @* v3 U% d* c& N! f) eLL( K$ v' p" v' \' Y- M2 m$ a. B
    % 训练后的初始概率分布
    ; Y' j: a8 X: E' r" ?7 E7 Gprior24 a; I; F8 d& k$ g" o: A: w
    % 训练后的状态转移概率矩阵% S$ F9 I4 N8 g
    transmat2
    - ^* G/ F: w, I4 X! z9 |: a) y% 观察值概率矩阵
    " z. @7 m" G5 m. K& S  M% iobsmat2
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    * M& u5 Y# P% i1 j, g% 添加部分( e5 U7 k8 x' Q" g5 v( r# z  z
        [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));
    / A/ k0 s+ R; _" k    LL2
    $ z; `: R# v- V$ \1 m$ I    prior4. T1 G0 \8 n1 g/ Z# ^, I1 C% }& m
        transmat4# W' y5 U, h9 T& s, }$ F" p
        obsmat4
    - F3 S# r3 v/ ~) C3 D& S5 r%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % use model to compute log likelihood, q$ W0 E% |; |. z/ Y, S, A) N1 O
    % data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]- m" q3 `  W. m# N; J- r7 l- U* h/ |
    data1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]' q) J$ j& U% d" N* H
    loglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)+ h# w$ ^2 V4 J+ `# @
    % log lik is slightly different than LL(end), since it is computed after the final M step
    3 f' W9 t# p4 e% loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
    % path为viterbi算法的结果,即最大概率path
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    * F, M- H; @7 L; ^7 s( q! Z% 添加部分0 y8 U2 ?* R# {. O. K3 Q
    loglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)' O* E: y* P2 z9 M* ^9 b2 z& C
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    ) z: `7 V" m+ fB = multinomial_prob(data1,obsmat2);+ ~: O& ^( i3 ~8 r
    path = viterbi_path(prior2, transmat2, B)
    5 T3 A! E1 i4 y: F+ [+ f/ Gsave('sa.mat');

    2 u) z' T* B# x% v%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    / {" @4 j# N& N* ?& G; J$ S3 T% 添加部分
    + X# [# t2 s3 ?. _. G, C+ H" g    B2 = multinomial_prob(data1,obsmat4);
    5 |9 d* L! _' o; n    path2 = viterbi_path(prior4, transmat4, B2)
    " }. n/ B: |1 n/ k; U    save('sa2.mat');* H7 E0 L( D7 Z7 D) m* w2 E
        if loglik2 > loglik 6 g- v, ^: n# f' E
            fuhe = 2! R) i9 Y' c; c3 C# y5 z6 Y5 _
        else+ f- t5 G7 I# S$ K( n0 a* K% N
            fuhe = 1
    & T  S) g  ]$ |) Y. U    end   
    ! y0 V4 m1 b9 _% ^: b0 s% ^%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ------
    运行结果
    ------
    data =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    " F: d* L# x( k! v% B+ m4 ^     1     2     3     6     2     2     1     4     3     1     5     3     1
    7 t) \8 q$ m& h     1     2     3     1     2     5     1     2     4     1     2     3     2, v3 t! [1 U) Q0 @
         1     2     7     1     2     2     1     2     5     1     2     4     1
    - v0 u1 H8 ^4 G; l     5     2     3     3     5     2     1     2     3     1     2     3     6& ^: Z9 c+ a0 K
         1     2     3     1     2     2     1     6     5     1     2     6     4" u& B! \  S5 Z
         5     2     3     4     4     2     1     2     3     1     2     5     63 I  y! ~! z4 ?& ~
         1     2     6     1     2     2     1     2     3     1     4     3     2! a/ D" k* G8 X+ t8 {
         1     2     3     4     2     7     1     4     3     1     7     3     3
    3 {1 Z7 `* ~& Z: b     5     2     3     5     2     2     1     2     3     1     2     3     46 C  D) @, U8 j) j
         5     2     4     1     2     2     5     2     3     7     1     6     2

    0 D- ]" {+ O  d6 rdata2 =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    8 `, x- f3 q! s4 Y: A3 j     1     2     3     6     2     2     1     4     3     1     5     3     1
    ( z/ W' w8 r1 s, s5 [     1     2     3     1     2     5     1     2     4     1     2     3     2
    # p8 |0 F" _" K1 k     1     2     7     1     2     2     1     2     5     1     2     4     1
    9 W9 @" @. b! D. o3 S     5     2     3     3     5     2     1     2     3     1     2     3     6# ]" M4 P$ `0 _3 X& h
         1     2     3     1     2     2     1     6     5     1     2     6     4
    * l) l$ Q/ I; P$ ~     5     2     3     4     4     2     1     2     3     1     2     5     6, R- s, l7 t* j8 Y) s
         1     2     6     1     2     2     1     2     3     1     4     3     2+ Z6 [) b! J5 [- a- G$ b  \0 y
         1     2     3     4     2     7     1     4     3     1     7     3     3  @5 E0 L8 `) `& W! |
         5     2     3     5     2     2     1     2     3     1     2     3     45 S( Q2 \* J% s' R) F* e. V" T2 ^+ C
         4     2     5     1     2     2     6     2     3     7     1     6     4
    iteration 1, loglik = -327.100465, o. S4 H5 z: u* g
    iteration 2, loglik = -238.259812* v5 w( {) e4 R( B  x
    iteration 3, loglik = -232.962948
    0 z& X$ G" Q. [5 A" v8 F$ A& citeration 4, loglik = -223.323891
    . p- }2 o: o- e& Y4 diteration 5, loglik = -207.630875
    ) ]7 p6 ]( q2 z# witeration 6, loglik = -191.012697+ Y' B1 u1 ]  {/ e2 _
    iteration 7, loglik = -178.6115465 a! S" Y6 A6 F1 F( Q
    iteration 8, loglik = -171.524132
    $ A9 @( g8 {) ]  k' }" o$ I: Literation 9, loglik = -168.6265266 ^$ B- ]( Z8 d7 `' M
    iteration 10, loglik = -167.3870570 Q7 ~( t! A, X/ g$ t
    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
    3 S3 Z. i* {" Z: a+ v
    prior2 =
        0.0000+ k" i; X9 `$ K  K5 G
        0.0000; z5 Z+ _  L3 a3 a5 w# w
        1.0000
    ) j2 y$ Q5 S" s) f) C    0.0000
    1 P# z2 ?8 I! m, k    0.0000
    1 ~9 l2 b8 _1 ?
    transmat2 =
        0.0138    0.0089    0.7680    0.1060    0.1033# y- |$ P! m2 u' X* \6 J7 [- \" c
        0.7811    0.0000    0.0199    0.0067    0.1923" w6 U/ ^. ?5 K4 ~1 r: s9 G
        0.0000    0.9936    0.0000    0.0064    0.0000
    4 h  C) m" \. ]    0.1686    0.2604    0.2242    0.3398    0.0070
    * C' p7 s! o2 B# B  i    0.0053    0.0406    0.8350    0.1184    0.0007
    ) d' w# P0 W2 A9 @5 F
    obsmat2 =
        0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.0351  F. `+ a0 x" H) J. P/ q
        0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.0228! q0 ?/ {: k$ c& t/ r$ d( h+ T
        0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.0000  N; S; E& Z. [' q" p; K# O
        0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.00555 L' l& v* B. j& p9 ~; {/ V$ s8 B
        0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
    iteration 1, loglik = -277.738670  Y. c) G" V2 {, `* i7 W2 g
    iteration 2, loglik = -242.163247- E. E! d4 ~$ i& ?6 ^
    iteration 3, loglik = -238.321971/ j& n' m- S3 r1 B! ^- k$ R! J9 t
    iteration 4, loglik = -233.166746) t; f4 u, f0 Y8 r. p# I
    iteration 5, loglik = -225.682259
    ; g* e/ k* O5 U6 {iteration 6, loglik = -214.5602961 o6 D1 E4 B, V# N2 B) c, c
    iteration 7, loglik = -201.182015
    $ W. E7 n5 s" C* l5 i% \' titeration 8, loglik = -189.427453% ?& G) E, g% r! @3 N. D: \
    iteration 9, loglik = -179.1563520 V( p) u; _) h9 c! A
    iteration 10, loglik = -171.7440964 ~9 D! `4 P8 y" `( ^% u
    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
    8 X3 X  s- _" D! d& _
    prior4 =
        0.0000
    1 U1 o' E& W1 f- f7 O; }    0.99826 L7 ?3 t2 n8 a; B* o5 p4 v1 T
        0.0004
    , ~2 _) D6 q2 y7 C% X" W: m    0.0014
    0 p# H7 R2 u6 o. c: o- O1 O/ F6 m    0.0000

    ) E0 a5 t$ L* Wtransmat4 =
        0.0873    0.5277    0.2799    0.1007    0.0045. c. ^: L1 a7 X1 C* ?) T
        0.0002    0.0000    0.0005    0.0000    0.9994
    + s0 C5 d' @# l    0.0180    0.0000    0.0118    0.0011    0.9692
    0 j& B/ |( H. v4 a: U# E+ x    0.0436    0.0226    0.0810    0.0219    0.8310
    0 Z& Y# ?; s* V* C    0.9746    0.0056    0.0003    0.0195    0.0000

    6 G$ _/ J5 @7 S) a* s+ yobsmat4 =
        0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.07705 c! s' d0 y% w; \+ w! ^
        0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.00002 D6 n, _. H. r* A) v  f) Z
        0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001
    % P- ~! h+ ]# z/ |- h    0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.0802
    . f2 D2 |7 g3 ^1 p7 p4 p    0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225
    ' f/ Y# }$ B( g9 C# x6 }0 k9 C
    data1 =
         5     2     4     1     2     2     5     2     3     7     1     6     2

    " j$ N5 s9 a1 X+ q+ g9 n5 Nloglik =
      -19.2351

    % f3 ^, Q* Z) q4 kloglik2 =
      -21.0715

    5 _0 X+ M: \/ c" ^# {path =
         3     2     5     3     2     1     3     2     1     5     3     2     1
    6 Q  `+ ^' \5 U# t* C
    path2 =
         2     5     1     2     5     1     2     5     1     1     2     5     1

    ; U+ M9 y& |  L: T7 Pfuhe =
         1

    + H) k3 S, j* s7 `7 ?5 R
    / \" Z' `; q( n3 a8 a& G; M( U' W" ^; W% O; p4 i! ]  K7 |! S6 s1 g" 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-6-9 18:50 , Processed in 0.608848 second(s), 54 queries .

    回顶部