QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1573|回复: 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
    * m3 F6 R6 _: J3 l0 V8 V7 g; o" ?
    隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱
    6 S8 e  K: f! L, l
    % ①定义一个HMM并训练这个HMM。
      U; @' w& }) I6 z4 a- M& `% ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。
    % v' n. g0 v" r3 L) g% 修改:旺齐齐8 C6 B( l4 _8 Z
    % 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。  T  A! V* K" ?& k% E
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % O:观察状态数3 ?1 Y6 p" v" O6 e3 b
    O = 7;' Y- M7 t4 \5 M- W1 z
    O2 = 7;, b% Y4 Z9 p! V& ~' Q5 o8 n
    % Q:HMM状态数
    % D. t* X; S& V2 X4 U( Z# X0 F8 l/ ]- VQ = 5;1 z  T- W0 J+ e8 r
    Q2 = 5;- ]: \. x7 F+ X
    %训练的数据集,每一行数据就是一组训练的观察值# g  [( }8 _$ ^; d* S2 @; K
    data=[1,2,3,1,2,2,4,2,3,1,2,7,2;/ r7 Y  ^' {# d
          1,2,3,6,2,2,1,4,3,1,5,3,1;) L' U" U, Y# y0 m/ Z: E
          1,2,3,1,2,5,1,2,4,1,2,3,2;
    $ q2 h# \& O! ]      1,2,7,1,2,2,1,2,5,1,2,4,1;. `6 Q0 D0 p/ ~% `" |9 z
          5,2,3,3,5,2,1,2,3,1,2,3,6;- t. O9 W5 @' h. n, y
          1,2,3,1,2,2,1,6,5,1,2,6,4;
    7 e  l/ p. i4 V9 O- L8 r: \      5,2,3,4,4,2,1,2,3,1,2,5,6;
    ' u% {- v! |0 {# e( c8 _" C9 G( b      1,2,6,1,2,2,1,2,3,1,4,3,2;
    / L2 K' P- K% d  N' ?- @      1,2,3,4,2,7,1,4,3,1,7,3,3;0 W( W: g" n& b% L# h
          5,2,3,5,2,2,1,2,3,1,2,3,4;' t/ u: i) |1 O
          5,2,4,1,2,2,5,2,3,7,1,6,2;]

    * U8 h! c& c& c" ~  data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;
    + c; s, ~5 Q* W) O" i          1,2,3,6,2,2,1,4,3,1,5,3,1;- p7 ^. R2 W6 k! W* w
              1,2,3,1,2,5,1,2,4,1,2,3,2;
    7 M' K/ B. d+ n8 B          1,2,7,1,2,2,1,2,5,1,2,4,1;) j. f6 b* X6 L% G
              5,2,3,3,5,2,1,2,3,1,2,3,6;
    ( c- v  d# a% M/ N% F; `          1,2,3,1,2,2,1,6,5,1,2,6,4;
    4 S& g( J3 f3 _1 X- k9 \5 f' ^% `          5,2,3,4,4,2,1,2,3,1,2,5,6;# n! C+ ^- p5 Y( `) w" @
              1,2,6,1,2,2,1,2,3,1,4,3,2;
    " E7 F) M$ `9 n! p$ B          1,2,3,4,2,7,1,4,3,1,7,3,3;
    " M( X! u' _1 e          5,2,3,5,2,2,1,2,3,1,2,3,4;- p  D0 |3 t, {4 U, q  t8 G" K& \
              4,2,5,1,2,2,6,2,3,7,1,6,4;]
    % initial guess of parameters$ }0 m+ l2 V+ O5 }' {& N. A
    % 初始化参数. C  S5 q. D: P, F; a" A$ }
    prior1 = normalise(rand(Q,1));: b  {( V5 ^4 ~3 X" y# T& t1 H
    transmat1 = mk_stochastic(rand(Q,Q));
    9 R. B# Q( h) a5 P& {obsmat1 = mk_stochastic(rand(Q,O));
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%3 G: y  Z/ t6 P* y( b
    % 添加部分2 M* e6 H7 V" d/ q! {1 `
        prior3 = normalise(rand(Q2,1));/ m8 F/ x* r/ D) {. d1 J
        transmat3 = mk_stochastic(rand(Q2,Q2));
    $ m' x0 u" B2 }: N    obsmat3 = mk_stochastic(rand(Q2,O2));. h" a4 _# D1 f$ q: r/ s; O
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % improve guess of parameters using EM
    1 A5 N# [' V% Y8 F% 用data数据集训练参数矩阵形成新的HMM模型
    " [+ v% i3 Y) W' ?" f* T[LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));% w! q% ~& b$ U2 b. X# t
    % 训练后那行观察值与HMM匹配度9 U" J4 K! a6 e. a, f1 y
    LL) Z" p# O$ H2 B" X) N1 Z
    % 训练后的初始概率分布
    . m5 O1 [5 @" A4 iprior2: p- N. ]9 x- B: Y, U
    % 训练后的状态转移概率矩阵
    & g9 ?# C; j) B- l# c( Ptransmat2
    6 }) Q2 L! q7 p7 M8 W# S) d8 Q% 观察值概率矩阵
    - ?3 r0 q/ A9 k3 d$ Sobsmat2
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%: w: A& Z% t/ s! Q" S3 G3 w
    % 添加部分2 _4 q0 d" C, i6 w, g9 v2 o
        [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));
    0 f. Z) l4 T: N6 G/ y, d$ a% k9 @# B    LL2
      C5 l! k  s" w    prior4$ Z1 C8 @/ L, d: R
        transmat4
    0 ?6 J  D- {0 p$ V" y) p7 l0 G: b    obsmat4
    : N: j, ^7 G% f% ~1 Z) a7 a  _3 u%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % use model to compute log likelihood. p! ]% _( U. O$ R
    % data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]7 A: v3 P+ r5 Z
    data1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]
      `, L) p6 a9 M* p( a8 \loglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)! `8 ]. w0 b+ u9 D; J
    % log lik is slightly different than LL(end), since it is computed after the final M step
    ( Y, l1 l: M1 L7 |' S/ s% loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
    % path为viterbi算法的结果,即最大概率path
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    9 n/ f/ C1 G- l9 J  J. B) s: l7 C% 添加部分* ]$ w9 [, g% [
    loglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)2 F) U, A' e2 d# B# D
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    & y  q# m( |7 p% l7 c/ k
    B = multinomial_prob(data1,obsmat2);! C& b5 ^0 C( r( y
    path = viterbi_path(prior2, transmat2, B)
    $ C7 a* U3 W: k9 `' asave('sa.mat');
    8 q# e8 m3 A$ ^  o' }. @* ^/ Q
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%0 U5 \& l7 M/ G
    % 添加部分# Q' b2 O4 t6 r8 P
        B2 = multinomial_prob(data1,obsmat4);
    2 s) F3 t4 I8 ?+ y. J- @    path2 = viterbi_path(prior4, transmat4, B2)
    : M# d* b: P' S$ Q    save('sa2.mat');, T' T5 I: A0 v3 t& v
        if loglik2 > loglik ) R+ y; L9 c* p( ]
            fuhe = 26 U8 E4 A  A+ `$ f6 u. M% N$ j
        else0 \8 F' }" Z4 Y; `
            fuhe = 1* a% _3 n8 o. N  d2 F
        end   
    4 |2 u3 O. r* s- N; P%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ------
    运行结果
    ------
    data =
         1     2     3     1     2     2     4     2     3     1     2     7     2" M7 x* Y$ w6 V/ h
         1     2     3     6     2     2     1     4     3     1     5     3     1/ ]) g7 u8 V1 E) z8 h1 T2 j
         1     2     3     1     2     5     1     2     4     1     2     3     2$ ^4 L4 c* _. E7 L  E& C( m6 e/ q
         1     2     7     1     2     2     1     2     5     1     2     4     1
    1 |" g  m0 e) U$ l9 G* i; Q     5     2     3     3     5     2     1     2     3     1     2     3     6
    " B* N( b+ u! z# `4 e7 S     1     2     3     1     2     2     1     6     5     1     2     6     4
    & _! y5 [4 N2 ^9 \6 w     5     2     3     4     4     2     1     2     3     1     2     5     67 z7 q4 v9 J# B
         1     2     6     1     2     2     1     2     3     1     4     3     29 q& o1 M( U/ k( X+ }5 Z1 V
         1     2     3     4     2     7     1     4     3     1     7     3     3
    , a) J4 M7 i( L# G- N     5     2     3     5     2     2     1     2     3     1     2     3     4
    ( u8 w' `$ l- [" T2 {     5     2     4     1     2     2     5     2     3     7     1     6     2

    6 Y# j: H, r2 `+ g. V- Z4 idata2 =
         1     2     3     1     2     2     4     2     3     1     2     7     23 W' }' F. ~6 L9 X0 G5 w6 i
         1     2     3     6     2     2     1     4     3     1     5     3     1
    5 {5 Q7 }  b! F9 ]$ m" T2 v  N     1     2     3     1     2     5     1     2     4     1     2     3     23 b# D, E( G# p7 R
         1     2     7     1     2     2     1     2     5     1     2     4     1" {* i; d+ \2 d( ]% [
         5     2     3     3     5     2     1     2     3     1     2     3     6: k* E  U8 Z) c# A1 o- p( \
         1     2     3     1     2     2     1     6     5     1     2     6     4( ]7 H9 V0 b* P3 G8 F
         5     2     3     4     4     2     1     2     3     1     2     5     6
    ( J0 J; j, J& k9 w2 h9 @6 ?) i     1     2     6     1     2     2     1     2     3     1     4     3     2/ ?1 s/ j5 `$ d( T
         1     2     3     4     2     7     1     4     3     1     7     3     3  {" @' X- Z% f; H2 J7 y0 z3 K( A, d
         5     2     3     5     2     2     1     2     3     1     2     3     4! F. K8 Z! x3 s3 S" M$ L( Y+ E
         4     2     5     1     2     2     6     2     3     7     1     6     4
    iteration 1, loglik = -327.100465
    # `$ T- ]1 M, w& G, K" [0 M1 [iteration 2, loglik = -238.259812
    9 v: i+ B7 E9 ?2 s( j* X. uiteration 3, loglik = -232.962948
    " t; G1 e" c3 ~; r5 Citeration 4, loglik = -223.323891( u4 |+ _* L. r  ~4 t9 t" c' J
    iteration 5, loglik = -207.6308750 u# u8 i- G7 q- i; s+ K
    iteration 6, loglik = -191.012697) T' w9 Z( P* c% c; d4 J! P
    iteration 7, loglik = -178.611546
    * }* d# P6 B+ t7 m& s2 p# G: `, viteration 8, loglik = -171.5241322 ?  Q. I; \. A/ O8 c# O. P
    iteration 9, loglik = -168.6265264 P. I6 `1 v2 ^/ N
    iteration 10, loglik = -167.387057, A$ b5 W6 P5 W3 n. N' }2 ]# 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
    ) s' S) C& p3 d! Y$ G8 I9 E
    prior2 =
        0.0000
      K% i6 f7 e* j& Q    0.0000
    # v. T/ y- m3 D, G- y& d; b    1.0000& a) v) G5 b  E+ f- A
        0.0000/ E+ o2 p9 A) L+ I/ |
        0.0000
    5 [4 I# g4 [; O5 _+ u  z$ Z
    transmat2 =
        0.0138    0.0089    0.7680    0.1060    0.10338 o; U* j8 R9 {$ ?, C5 w8 t
        0.7811    0.0000    0.0199    0.0067    0.1923, T/ Q7 i0 }* J2 [/ u, [
        0.0000    0.9936    0.0000    0.0064    0.0000* h. e) }( T# y: X9 `  T  R% t
        0.1686    0.2604    0.2242    0.3398    0.0070
    5 y0 S/ Q% F8 V9 N    0.0053    0.0406    0.8350    0.1184    0.0007

    $ L% j9 t, F  j2 M: q* F6 o6 `, L' [. {obsmat2 =
        0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.0351
    9 `+ |% s2 W: e' n* r" i    0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.0228
    . q0 e% ^( f9 `; P; u  b; X$ A  D    0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.0000
    . i# p/ i0 F8 L( ^; D    0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.0055
    # J4 S7 O& b0 B6 v7 b    0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
    iteration 1, loglik = -277.738670
    ' J3 F6 q( |2 j; I! ziteration 2, loglik = -242.163247
    * r9 |+ M( s5 D( T, Oiteration 3, loglik = -238.3219719 q& x1 c  Q/ ]% p( w
    iteration 4, loglik = -233.166746
    4 u/ k+ g$ k  Z% H' [5 \7 i$ f! hiteration 5, loglik = -225.682259
    / L% X; t, O( H% Kiteration 6, loglik = -214.5602967 \6 P* ^7 |! |$ h, w& h
    iteration 7, loglik = -201.182015
    " K/ O; [; t3 H) {iteration 8, loglik = -189.427453
    / [" Q* t6 a# w1 Q8 K$ C; T$ Z: Qiteration 9, loglik = -179.156352. T$ {0 B+ ^8 I; v
    iteration 10, loglik = -171.744096
    . R* S3 J4 ^- J! T5 n9 siteration 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

    6 ]+ I, ]# P/ r: @* Q( F; Dprior4 =
        0.0000
    ! B: {- u& V- F/ T/ }5 G    0.9982
    7 n8 w( {3 g' _5 L/ ^( c& }    0.0004. s2 `5 [4 m3 Z4 ]+ i
        0.00141 ^$ \. C2 z; P# o; S  W
        0.0000

    " G3 L* t6 c4 j/ e: stransmat4 =
        0.0873    0.5277    0.2799    0.1007    0.0045
    . j8 Q0 I' U8 `* `+ y1 O" V/ \5 o    0.0002    0.0000    0.0005    0.0000    0.9994* ]& ~% @% t/ m5 v! R
        0.0180    0.0000    0.0118    0.0011    0.96922 U2 T, B: h; y0 o/ m
        0.0436    0.0226    0.0810    0.0219    0.8310
    + U9 G" [, R3 T0 e! z$ i" l    0.9746    0.0056    0.0003    0.0195    0.0000

    8 R3 Y: t$ d8 X4 i) nobsmat4 =
        0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.0770
    ( ]) D/ ]5 Y) C1 M    0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.0000
    - R4 g4 M5 a+ P    0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001
    & p: I+ R! f. ~; `0 K5 r& u% s    0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.0802
    1 y; ?( e" d; o* x/ W  @( B9 |    0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225
    - |* M7 @' a& H* l( Q( O
    data1 =
         5     2     4     1     2     2     5     2     3     7     1     6     2

    : o' |. L( C, M# I- bloglik =
      -19.2351
    % }8 `* Z, D" ~' t) Q
    loglik2 =
      -21.0715

    : m% G+ O, X% i" d+ Lpath =
         3     2     5     3     2     1     3     2     1     5     3     2     1
    & {! O- H  S8 D5 P0 z  \8 d8 F
    path2 =
         2     5     1     2     5     1     2     5     1     1     2     5     1

    , S% J( c4 ]8 t6 ?0 Ufuhe =
         1

    $ [( k4 |5 k% r/ T- ^0 ]# g2 p2 C0 v6 c4 J0 y# [
    # G8 c+ f% n! n

    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, 2025-9-11 03:15 , Processed in 0.336723 second(s), 55 queries .

    回顶部