QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1725|回复: 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
    1 |0 G" p5 @6 \- h
    隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱
    ' T1 F6 V. D$ m
    % ①定义一个HMM并训练这个HMM。
    $ X0 d/ X' W! g: C9 [2 q+ o% ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。
    1 p' X: i8 U- Z) p% 修改:旺齐齐
    / k! t( h+ x2 Q% 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。
    & ]; K$ \$ x3 n, F6 p0 X%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % O:观察状态数
    / U& w' f5 {0 |8 z1 _' `' nO = 7;, ^, J- d5 k0 J) E* t
    O2 = 7;
    + S  [. g0 i7 c/ a2 y# C% Q:HMM状态数  z* \- t2 ]/ k# v& X
    Q = 5;  g4 z/ ?1 C' S
    Q2 = 5;
    ! w- Z$ ^' {6 Q%训练的数据集,每一行数据就是一组训练的观察值$ B1 x9 G! u& t3 u* s
    data=[1,2,3,1,2,2,4,2,3,1,2,7,2;0 u3 s8 ]( q" _/ M2 s
          1,2,3,6,2,2,1,4,3,1,5,3,1;$ R" k1 f! A5 i& c4 Z! ~4 c
          1,2,3,1,2,5,1,2,4,1,2,3,2;
    1 {. }  F% v3 |" h      1,2,7,1,2,2,1,2,5,1,2,4,1;
    ! ^2 T& \# s7 O; X3 m/ f9 r; a      5,2,3,3,5,2,1,2,3,1,2,3,6;& _2 T! Q1 U4 s% ]% c, b# N
          1,2,3,1,2,2,1,6,5,1,2,6,4;# Q) O6 g: i# n( c7 u* k, h; A
          5,2,3,4,4,2,1,2,3,1,2,5,6;
    6 V5 |1 g) N0 A# v! n0 m      1,2,6,1,2,2,1,2,3,1,4,3,2;
    0 t$ x% j; f% X7 Q& I      1,2,3,4,2,7,1,4,3,1,7,3,3;, L# t6 n7 K! W& v- u5 y  p
          5,2,3,5,2,2,1,2,3,1,2,3,4;
    . Y0 D3 z1 W5 C1 K' x' r4 `      5,2,4,1,2,2,5,2,3,7,1,6,2;]
      D# b$ n" g! `& k
      data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;
    # b, u1 u. J4 W2 m/ y: M" o( T, a          1,2,3,6,2,2,1,4,3,1,5,3,1;
      B  `2 G; }7 y2 Y          1,2,3,1,2,5,1,2,4,1,2,3,2;% j% C( {: s2 l) p
              1,2,7,1,2,2,1,2,5,1,2,4,1;
      c  ]7 ]) V9 c" M( ]- m          5,2,3,3,5,2,1,2,3,1,2,3,6;/ t) N( A% o# m- z, [" p
              1,2,3,1,2,2,1,6,5,1,2,6,4;
    6 T) f0 p2 E* r! x& x          5,2,3,4,4,2,1,2,3,1,2,5,6;
      F( p% x2 t0 y2 G& t) B          1,2,6,1,2,2,1,2,3,1,4,3,2;
    9 U- E$ f* Z% d. [( A+ \& h7 \. B          1,2,3,4,2,7,1,4,3,1,7,3,3;
    3 E( `" O9 Z  k3 r          5,2,3,5,2,2,1,2,3,1,2,3,4;9 h0 i# o) U' ?2 _# @. ~* Y' H
              4,2,5,1,2,2,6,2,3,7,1,6,4;]
    % initial guess of parameters  @4 ?1 c& \5 X# K. w8 L
    % 初始化参数
    $ x* F+ Y4 i( a4 l/ G0 J# T" Oprior1 = normalise(rand(Q,1));5 N( G; {; f3 t3 f6 {  y  |: {
    transmat1 = mk_stochastic(rand(Q,Q));
    / G6 T3 u, e. V( B/ lobsmat1 = mk_stochastic(rand(Q,O));
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    : p: f* l; G/ T4 z( l  s2 t% 添加部分
    : U" [% R% {  z( |    prior3 = normalise(rand(Q2,1));
    6 {' q$ Y# |; x* u: Z4 c: |6 Q: ?4 u    transmat3 = mk_stochastic(rand(Q2,Q2));
    9 {) `1 b: [( W- X" a! X    obsmat3 = mk_stochastic(rand(Q2,O2));
    - V% e5 O8 Y' M, y' ?3 F6 s%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % improve guess of parameters using EM
    1 V* B4 f/ k* G, i  M+ p$ p% 用data数据集训练参数矩阵形成新的HMM模型9 y# d5 X8 _* [
    [LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));/ G+ n$ Y& e' O$ B. L  p% P
    % 训练后那行观察值与HMM匹配度, u! q" \' b7 e5 c
    LL
    $ Y$ }  @+ a( i; _5 K% 训练后的初始概率分布* Z& ?) F! A- h) |# k! L9 a+ R
    prior2, d8 |# g$ ~% p  R4 K
    % 训练后的状态转移概率矩阵/ y. W+ D' \, T- m- R* ^6 H
    transmat2" P* s+ q1 g( b3 n" ~, y  x: E
    % 观察值概率矩阵
    5 T* \4 O* }2 n. s1 |- gobsmat2
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%. m$ V$ \7 z2 x/ J: k
    % 添加部分
    ' B* g# Q+ ]# L$ y4 w    [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));/ }' \# Q' q$ e7 x' W2 u  I; W3 G
        LL2
    9 w4 L6 D( l/ ?+ r    prior4
    ( s$ l4 H3 A1 \    transmat4+ X. [8 M4 C+ |8 O* `
        obsmat4
    ( |. s% Y; k. d%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % use model to compute log likelihood
    7 J1 o+ H4 F' @  ], f% data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]
    9 N: n% I: q7 f4 ^data1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]+ b* D1 c7 f) ^- y& [( v" J) a
    loglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)
    5 B3 R9 R: E1 t5 E* w% log lik is slightly different than LL(end), since it is computed after the final M step
    0 N3 ?% c& B! o$ z% loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
    % path为viterbi算法的结果,即最大概率path
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      a8 q" f9 w+ O' f# l! \% 添加部分( x2 @* c# G5 b& P% ]9 t
    loglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)8 G- G/ s+ t1 a  B0 ~
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    " \& Z* |/ c# _
    B = multinomial_prob(data1,obsmat2);
    ( z6 ?" A/ u. x! ^+ Spath = viterbi_path(prior2, transmat2, B)
    / x6 n5 Z- f3 v0 E3 E8 Y# I; g( Ssave('sa.mat');

    6 N9 G. j5 F. L5 o$ ~%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % B# Q* ]. k$ R% 添加部分
    + b$ q# ^& w  I  [    B2 = multinomial_prob(data1,obsmat4);  ^1 g. E/ X! r
        path2 = viterbi_path(prior4, transmat4, B2)' R6 O" Q! O! V4 j! B& Y
        save('sa2.mat');4 ~5 M9 J# g$ `% B
        if loglik2 > loglik
    7 S* n5 N8 o9 \- D  V( X        fuhe = 2' r: p, V% H, {  q( G  ]# u
        else$ U; u+ U/ C% v5 U+ O" M
            fuhe = 1
    4 C  w" o# R7 K% V. F    end   
    . h) k2 n9 ^" K; Z3 Z%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ------
    运行结果
    ------
    data =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    ( f! a/ q4 q1 T/ w& w     1     2     3     6     2     2     1     4     3     1     5     3     1
    - L) {) Q4 m8 g- g: M     1     2     3     1     2     5     1     2     4     1     2     3     2
    + g, I) a) w3 L     1     2     7     1     2     2     1     2     5     1     2     4     1
    ; G, `' ?. S6 u% d     5     2     3     3     5     2     1     2     3     1     2     3     6* |# A$ z+ g0 a5 a& s
         1     2     3     1     2     2     1     6     5     1     2     6     48 H( Y7 F( V( o; p$ B* r. h! p
         5     2     3     4     4     2     1     2     3     1     2     5     6
    * O# h9 l4 W3 O) y- O     1     2     6     1     2     2     1     2     3     1     4     3     2  k; I3 i& Q  Y' ]/ n8 W
         1     2     3     4     2     7     1     4     3     1     7     3     3+ M; K7 |" h1 y5 H
         5     2     3     5     2     2     1     2     3     1     2     3     4
    # I  S9 v8 s' Y, a7 @     5     2     4     1     2     2     5     2     3     7     1     6     2

    $ P: e! O2 K6 Y6 E6 K3 F; R7 u+ Zdata2 =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    : U6 h  n$ V% ?     1     2     3     6     2     2     1     4     3     1     5     3     1
    7 B* u6 }; J, b     1     2     3     1     2     5     1     2     4     1     2     3     2
    3 B3 D4 A1 f, P4 ~' `     1     2     7     1     2     2     1     2     5     1     2     4     1
    6 \7 T. `2 W2 u9 L" X     5     2     3     3     5     2     1     2     3     1     2     3     6
    * w/ ]# W3 n3 ~3 Q4 t     1     2     3     1     2     2     1     6     5     1     2     6     44 i" i6 a; m. C7 w
         5     2     3     4     4     2     1     2     3     1     2     5     6  L7 g: p$ l# \0 w6 A
         1     2     6     1     2     2     1     2     3     1     4     3     2
    0 b8 J% |3 o1 Z  H2 a' B2 C     1     2     3     4     2     7     1     4     3     1     7     3     3
    % W2 H& z4 K9 \" l) e3 D9 F     5     2     3     5     2     2     1     2     3     1     2     3     4
    2 j1 r2 T; X, I8 I. i: C' D& h     4     2     5     1     2     2     6     2     3     7     1     6     4
    iteration 1, loglik = -327.100465/ P2 t3 @0 K/ j3 k% x
    iteration 2, loglik = -238.259812  M  E; K% D4 [2 ^" T" J+ p
    iteration 3, loglik = -232.962948
    / }7 E' H& x$ M$ aiteration 4, loglik = -223.323891# r! z8 }3 \/ U5 y* i: Z! ^& _
    iteration 5, loglik = -207.630875
    8 v' s5 k- K; ?iteration 6, loglik = -191.012697
    3 O+ |3 W8 X6 P  ziteration 7, loglik = -178.611546
    + D* o- h% \- [, o( ~iteration 8, loglik = -171.524132, X0 Q7 S4 X5 @% t9 t# i* l
    iteration 9, loglik = -168.626526
    ; ^/ I- g# S3 A6 n* F$ I0 E& ^iteration 10, loglik = -167.3870576 {/ x% s6 D8 g6 l
    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

    . g5 D, T5 q+ C3 `prior2 =
        0.0000
      \5 ]9 a9 W% V, A% u! ~    0.0000
    2 |$ V8 ]; k) j5 L( R' v    1.0000* j! |9 E5 d3 s1 z
        0.0000
    1 A# S0 X( H/ |" T" a, i    0.0000

    4 `$ d" r+ a: ^- Z0 {5 Ztransmat2 =
        0.0138    0.0089    0.7680    0.1060    0.1033" ?( Z# M; y; K+ e; z. G# h
        0.7811    0.0000    0.0199    0.0067    0.1923
    ( L1 ?! s- r' Q- i- t3 V$ e    0.0000    0.9936    0.0000    0.0064    0.00000 P- e. x4 E. U1 E' V9 N3 K+ O. b
        0.1686    0.2604    0.2242    0.3398    0.0070
    # ^: u+ C5 N. y$ F' D+ `    0.0053    0.0406    0.8350    0.1184    0.0007
    4 ]3 [" d% R! o
    obsmat2 =
        0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.0351
    2 D; W/ j- k  {+ _- |    0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.0228
    . j6 m- k8 ~0 t; `" j9 [9 H7 Z    0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.00004 i6 _. D9 J4 g! u$ L! n" r6 t
        0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.0055+ I+ z$ Y2 }/ M3 l
        0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
    iteration 1, loglik = -277.738670
    2 Z$ L: l" @, Z# y! ?. Niteration 2, loglik = -242.1632470 J4 ^5 k" I1 d' U. A6 I7 u
    iteration 3, loglik = -238.321971" R; D8 Z7 A  F/ m7 u4 A# r
    iteration 4, loglik = -233.166746% x: \! U; N( y8 B
    iteration 5, loglik = -225.682259, ^9 D( J8 n4 r4 w1 J6 c: O
    iteration 6, loglik = -214.560296+ Q6 c/ F3 u2 f4 u, ?# j( [3 e
    iteration 7, loglik = -201.182015
    / N! j: `4 ?' Z/ piteration 8, loglik = -189.427453
    3 n- R! H' `  A" w/ N# niteration 9, loglik = -179.156352
    8 ^7 r0 t0 S" M0 F2 ]2 a- viteration 10, loglik = -171.744096
    ( u" b6 p' `& witeration 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
    ! @9 M) C0 [9 t# R, e$ l: M
    prior4 =
        0.0000! }7 U% Z/ ]2 R2 u, P6 a6 R' a
        0.9982
    4 Z6 J9 s0 U8 C# d/ f+ V    0.00048 F4 T* X0 E2 M: v
        0.0014: P2 O9 V! _2 L/ V2 h# T% ]
        0.0000
    : E& r) v$ Z% r0 H
    transmat4 =
        0.0873    0.5277    0.2799    0.1007    0.0045
      C* C7 t3 o; Q$ C* X    0.0002    0.0000    0.0005    0.0000    0.9994
    ; Q  J( W4 `; d0 E8 ]    0.0180    0.0000    0.0118    0.0011    0.9692/ p- U) ]6 F& D# l4 G( k3 t9 r
        0.0436    0.0226    0.0810    0.0219    0.8310
    3 t& c& p7 F5 h: W0 o6 I1 g$ y    0.9746    0.0056    0.0003    0.0195    0.0000

    1 e1 l! B" r4 y& Y4 Dobsmat4 =
        0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.07707 s3 R  m, @5 {# v; {0 }/ E) O
        0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.0000
    7 J6 ?* U  ?+ K* H$ j( g    0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001% y: i* Q- y2 L; K/ p
        0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.0802- D: k1 G, w, D4 x1 H
        0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225

    1 O# G8 r: V5 j% pdata1 =
         5     2     4     1     2     2     5     2     3     7     1     6     2
    - N5 @2 o3 s' B5 c9 [+ \9 T, T
    loglik =
      -19.2351
    : [  s6 G5 u$ s5 I. y' n1 [
    loglik2 =
      -21.0715

    7 [4 w7 B! R& t( W4 ^+ lpath =
         3     2     5     3     2     1     3     2     1     5     3     2     1
    + j: Z8 w9 V3 _9 m5 q
    path2 =
         2     5     1     2     5     1     2     5     1     1     2     5     1

    , n; v  P; f% {) nfuhe =
         1
    % J, E/ A9 k' o' P- G

    ( v4 j' u5 a1 {8 y: W( Q: z
    & [# O% h  B4 w9 J  P! U) D9 b

    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-19 07:40 , Processed in 0.424622 second(s), 55 queries .

    回顶部