QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1729|回复: 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
    4 t  D  q/ \! S7 Z
    隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱. S3 Y  d1 J* X! o. Y2 r
    % ①定义一个HMM并训练这个HMM。7 J# B0 x/ F% J; L
    % ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。
    9 p% `4 Y0 D8 g5 D+ U4 H% 修改:旺齐齐  g- e4 b' h  w* _
    % 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。, ]+ h2 ~" j9 U7 _. x
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % O:观察状态数- Q# a/ P5 y# ~2 G/ F
    O = 7;
    & [" ]$ I: \) P7 _  vO2 = 7;! S0 C3 x, b/ L& j" p( Z3 m& m
    % Q:HMM状态数
    ( X' ]8 K' n- ?4 \1 XQ = 5;
    & y  d# {( a  O# AQ2 = 5;
    ' S2 x* j2 \$ n3 }%训练的数据集,每一行数据就是一组训练的观察值/ K/ o" x3 P6 a7 h
    data=[1,2,3,1,2,2,4,2,3,1,2,7,2;
    + j+ N: [2 {, T' S# H0 B      1,2,3,6,2,2,1,4,3,1,5,3,1;
    6 s! |, J, t% L* G. H. u0 W0 }5 _! |      1,2,3,1,2,5,1,2,4,1,2,3,2;
    - C  V( Z# {5 Y) Y5 ?  s      1,2,7,1,2,2,1,2,5,1,2,4,1;
    7 L, u1 }* M3 c8 X8 p! b, |      5,2,3,3,5,2,1,2,3,1,2,3,6;
    0 k% |* B* n# E* k0 p: Q      1,2,3,1,2,2,1,6,5,1,2,6,4;& X, ?* S; Y: f' y: b
          5,2,3,4,4,2,1,2,3,1,2,5,6;* N# F! N& E" N$ b
          1,2,6,1,2,2,1,2,3,1,4,3,2;
    ' k$ i1 L' V- z4 V. E3 y! X      1,2,3,4,2,7,1,4,3,1,7,3,3;
    9 i' @# C7 m4 h7 y1 s      5,2,3,5,2,2,1,2,3,1,2,3,4;6 m$ V7 x7 e5 f$ p2 M
          5,2,4,1,2,2,5,2,3,7,1,6,2;]
    - \. n0 t& E/ E9 M; d3 y/ a* s- u
      data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;& ~2 g' c* f; J/ ~; o/ o  O
              1,2,3,6,2,2,1,4,3,1,5,3,1;
    $ p: q: W2 j) Q0 h- i: @7 n% l          1,2,3,1,2,5,1,2,4,1,2,3,2;
    - X) G  W4 n' l3 p: V3 p          1,2,7,1,2,2,1,2,5,1,2,4,1;
    - Q3 @0 w8 W" c% M! X! X          5,2,3,3,5,2,1,2,3,1,2,3,6;
    7 Y! s9 a) x, T& d0 |/ E% s2 c          1,2,3,1,2,2,1,6,5,1,2,6,4;9 {9 H! Y' i9 H" ]8 |% q
              5,2,3,4,4,2,1,2,3,1,2,5,6;
    ' R/ W4 P' b" p& d  u9 L          1,2,6,1,2,2,1,2,3,1,4,3,2;
    ! K1 D+ I4 {; Y# J7 m% e* N+ ~          1,2,3,4,2,7,1,4,3,1,7,3,3;
    % K; d) U3 W; t          5,2,3,5,2,2,1,2,3,1,2,3,4;! A2 e) }6 D' j8 g2 a# n1 {" L
              4,2,5,1,2,2,6,2,3,7,1,6,4;]
    % initial guess of parameters
    . r" V( G! W) F! L7 g/ t) t. y% 初始化参数
    & D8 y8 X' w# _prior1 = normalise(rand(Q,1));2 N5 B* n3 ~  T$ e1 f9 h) O
    transmat1 = mk_stochastic(rand(Q,Q));- S! h  Z# h% h$ R; O; y- q
    obsmat1 = mk_stochastic(rand(Q,O));
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%9 L: w4 o' I2 @6 g
    % 添加部分
    3 Y* u# h" P6 o' W+ j/ m* ~    prior3 = normalise(rand(Q2,1));2 L6 Q  E- H  S& M' i. J! g2 ^7 N  G: {
        transmat3 = mk_stochastic(rand(Q2,Q2));9 J' x0 Y  l# X: u0 S& k# d
        obsmat3 = mk_stochastic(rand(Q2,O2));
    # N5 L6 k* v: Y  o$ q) K0 ?%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % improve guess of parameters using EM; b& S! I& @0 f. U) i6 h
    % 用data数据集训练参数矩阵形成新的HMM模型
    / w& p, e- ]( o( i, h) Q[LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));
    , N% M& r8 Q- ^& r! c. y% 训练后那行观察值与HMM匹配度9 J+ l1 d% Z: j; q4 q3 X" G
    LL+ `) b7 L9 g) L6 h( z& e* [
    % 训练后的初始概率分布
    9 S6 q3 W8 I( G# @prior2+ q% Q. m. l. ?
    % 训练后的状态转移概率矩阵- z/ P6 G, B- x  t
    transmat2
    ' x3 ~& h. S/ B9 ^/ S2 ?, E+ `% 观察值概率矩阵; |& Z1 r( P) e6 K
    obsmat2
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % W- e$ d. \, t" O4 r! t$ V% 添加部分
    + w9 Z' x) }8 z' e/ Y4 H" B    [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));. Q* R8 S: `6 {+ X) ^) ^$ f/ E( t6 O
        LL2
    , [! b4 e3 h. ^7 {9 y6 N9 o    prior4# F, N" N" g+ q
        transmat4
    & t8 {9 ?# i: p/ _" ]4 N    obsmat4# [. s9 Y6 m6 Z
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % use model to compute log likelihood
    , D! Z& g8 L. {, e9 @% data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]
    $ L5 [% V4 p( t+ _( g7 k0 X# U& Zdata1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]: Q" ^8 y/ e! a4 H9 Z- K5 S
    loglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)
    ' N- `3 L# s0 |: V2 j) b& w% log lik is slightly different than LL(end), since it is computed after the final M step
      Z* H1 j* P  j! c% loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
    % path为viterbi算法的结果,即最大概率path
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    0 W. b% E. `6 k" E: ^% 添加部分
    : C3 y+ `, e- T) U: X. k/ l, ]9 zloglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)
    " |* ?9 f; X! }- u$ H& @8 }%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ! |' X2 y% a0 g; [
    B = multinomial_prob(data1,obsmat2);% M( X& }5 a$ Q/ m
    path = viterbi_path(prior2, transmat2, B)4 |  H; C9 D- }% d( }0 k1 s
    save('sa.mat');
    8 e6 N: ]6 e( A) I  p9 T0 w
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%8 R/ S. k  O6 ~
    % 添加部分0 _$ {. ]4 S6 {4 |( A
        B2 = multinomial_prob(data1,obsmat4);: q, `5 M. I6 V  b  I/ ~, A
        path2 = viterbi_path(prior4, transmat4, B2)
    2 c# L/ j0 F1 i( {    save('sa2.mat');' }% Y- L2 N/ K* {/ A
        if loglik2 > loglik
    % b: A) D! c; O9 |8 z& V+ d# j        fuhe = 2+ |2 u2 p5 q, D- J8 `6 R
        else1 x& p2 D1 ?5 ?  ~: A0 f5 w  H$ h
            fuhe = 11 P; T* F- o0 w& U. a/ p* c
        end    % J1 E2 a6 c& i0 M* i% G
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ------
    运行结果
    ------
    data =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    * V& P$ V; G- o* }2 g' _8 Q- L     1     2     3     6     2     2     1     4     3     1     5     3     1
    + m0 \; e1 w; J! a, W, j2 C" x     1     2     3     1     2     5     1     2     4     1     2     3     2. n" s" J) y3 F4 f4 R( H/ k
         1     2     7     1     2     2     1     2     5     1     2     4     1
    * U' t- e$ w: R6 V. a/ f  a     5     2     3     3     5     2     1     2     3     1     2     3     6
    8 p- ]8 h; @1 d0 r* z" c     1     2     3     1     2     2     1     6     5     1     2     6     4
    # i: y& P- [: H5 S( `* l     5     2     3     4     4     2     1     2     3     1     2     5     6
    % H. M  e( }. e     1     2     6     1     2     2     1     2     3     1     4     3     2  g, L8 \# v8 f
         1     2     3     4     2     7     1     4     3     1     7     3     3
    8 J( X# f- ~, X, O# e: r     5     2     3     5     2     2     1     2     3     1     2     3     4
    : B* k* b/ M+ t- D" l     5     2     4     1     2     2     5     2     3     7     1     6     2
    3 j3 u8 T; \9 E- ^! I
    data2 =
         1     2     3     1     2     2     4     2     3     1     2     7     2, i) q7 W% V# i0 M
         1     2     3     6     2     2     1     4     3     1     5     3     1
    3 u6 o- d! \: c  u: C     1     2     3     1     2     5     1     2     4     1     2     3     2' H9 _# o8 |0 \3 ?1 {/ @, |
         1     2     7     1     2     2     1     2     5     1     2     4     1  v0 ~" j. Q! B" t& g
         5     2     3     3     5     2     1     2     3     1     2     3     65 i* W2 a, P5 \; v" |
         1     2     3     1     2     2     1     6     5     1     2     6     46 Q7 J6 x# f6 A9 c( r
         5     2     3     4     4     2     1     2     3     1     2     5     6
    9 k/ `; D$ Y: N! Q# [2 @- `     1     2     6     1     2     2     1     2     3     1     4     3     2
    . `* l6 e1 `% Q. P- p     1     2     3     4     2     7     1     4     3     1     7     3     3
    & K' }8 v& h: D     5     2     3     5     2     2     1     2     3     1     2     3     48 i8 y/ B/ F3 |5 m( c2 Z' b# W1 ]
         4     2     5     1     2     2     6     2     3     7     1     6     4
    iteration 1, loglik = -327.100465# j- G9 n6 [4 E7 F( W  K
    iteration 2, loglik = -238.259812( @2 F+ ]) J7 Q' t$ B8 ^
    iteration 3, loglik = -232.962948
    : J0 p6 T; \* t8 S  {; p* siteration 4, loglik = -223.3238914 k2 f0 \9 i% N7 X
    iteration 5, loglik = -207.630875+ @& L) v& Z* T1 `) D. g
    iteration 6, loglik = -191.012697
    " |; i6 C4 v) Yiteration 7, loglik = -178.6115467 U: f4 s9 [6 V$ L! ?
    iteration 8, loglik = -171.524132; U5 |$ }9 ^$ \4 b) k5 {3 d
    iteration 9, loglik = -168.626526" v( z, G' j% {  o& P! ~: {6 \: T" R, R
    iteration 10, loglik = -167.3870573 N7 g$ V; t, Q' F( m
    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

    2 X9 T- [+ G: D! e8 L: Q) Qprior2 =
        0.0000
    - i! f5 g1 \* B, E2 m  r2 Z    0.0000
    ( {3 J: s; I- f* a  ^+ p    1.0000) ~. P4 _, C7 y
        0.0000
    . P' _" E& ]2 C  l0 A4 ], i    0.0000

    # w# `; j' s! ]. {& S6 C5 u" |transmat2 =
        0.0138    0.0089    0.7680    0.1060    0.1033, z2 G6 {+ |6 Z: ^) |% H
        0.7811    0.0000    0.0199    0.0067    0.1923
    & m; B8 Y  U. N$ l; Y0 p    0.0000    0.9936    0.0000    0.0064    0.00003 p: E' b. b* x  R3 i% k7 J" v4 B
        0.1686    0.2604    0.2242    0.3398    0.0070
    ) }/ v" M6 C6 R* Z8 ~* ^& P4 A" J    0.0053    0.0406    0.8350    0.1184    0.0007

    / W! e" G* ~. d/ U2 |; w4 X. oobsmat2 =
        0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.0351( N. L+ x) t% X$ }& X7 `9 [& [
        0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.0228, ~1 Z/ @7 t( H- t; d
        0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.0000! i7 |* Y  f) G5 H
        0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.0055
    4 n4 ^4 e  g! T. A9 v8 |    0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
    iteration 1, loglik = -277.738670
    7 F. r! o) v. Yiteration 2, loglik = -242.163247
    # W2 ]  f' y% Y* {0 N0 u5 e1 C# `iteration 3, loglik = -238.3219713 k: ?! O# ?8 @; S  _
    iteration 4, loglik = -233.166746
    0 x1 u: r9 a2 n) g2 C4 G2 `; Giteration 5, loglik = -225.682259
    + d( ~0 a( F# @, ~- J! iiteration 6, loglik = -214.560296& k" q( ?  V4 O, E
    iteration 7, loglik = -201.182015# {5 P7 \, x  ^
    iteration 8, loglik = -189.4274537 e! A: I4 S* x
    iteration 9, loglik = -179.156352$ k8 T6 I' z+ C( }/ g
    iteration 10, loglik = -171.744096. w0 ^5 I0 y3 S0 j$ 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
    - v: R. C% [5 d5 O
    prior4 =
        0.00007 q/ U4 M. H: v- L2 g$ z8 a
        0.9982
    $ r6 S6 E" ~& b7 S" F; Z( a; W+ s    0.0004
    7 j6 O" G  \4 I; R0 o    0.0014
    * V5 {3 n) _0 \, s    0.0000

    - |: n- `  L2 ]9 Utransmat4 =
        0.0873    0.5277    0.2799    0.1007    0.0045
    - @, t2 R6 [0 u0 K. W4 L9 L    0.0002    0.0000    0.0005    0.0000    0.9994% h2 i2 S; K' F
        0.0180    0.0000    0.0118    0.0011    0.9692% _. J9 t$ q: M& g9 E
        0.0436    0.0226    0.0810    0.0219    0.8310$ G4 d5 `* A) x( O9 I  n7 Y, `, f" T
        0.9746    0.0056    0.0003    0.0195    0.0000

    2 U* l% [2 M: s* @0 f7 ?obsmat4 =
        0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.0770, s3 b6 R- [4 G& a' L0 T5 F
        0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.0000/ X) `, N# g: F
        0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001
    ( H. j7 _4 g1 _; X- W7 F5 N    0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.0802
    0 G: `, C5 ~6 Y5 W9 N6 m    0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225
    - A' h1 o7 X* r& E' f/ j% x1 ]
    data1 =
         5     2     4     1     2     2     5     2     3     7     1     6     2

    7 r8 A) R* j, Y( d' R3 }loglik =
      -19.2351

    . J3 ^8 M1 ~; t. q' }% @' uloglik2 =
      -21.0715
    - h7 D) Y5 E; z0 p9 [+ s6 k* L
    path =
         3     2     5     3     2     1     3     2     1     5     3     2     1

    6 r: M* `( l% n8 @. @path2 =
         2     5     1     2     5     1     2     5     1     1     2     5     1
    . E7 R* v* {9 {  q  ^
    fuhe =
         1

    & x5 v3 N4 ~% z& ]
    ! d$ ]0 T( U* H. S9 q& u0 p0 M4 s  j

    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 18:58 , Processed in 0.548702 second(s), 54 queries .

    回顶部