QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1723|回复: 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
    ! G! n9 L8 M5 ~$ I0 Z+ d; K) s
    隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱
    , N1 r6 S, Q! R9 ~3 W$ t5 C
    % ①定义一个HMM并训练这个HMM。
    1 P5 p0 c5 m7 l$ \2 {- g% ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。3 b7 V  k0 \7 L* T
    % 修改:旺齐齐
    3 V0 I* b) i# q+ B1 [8 S, v# u9 D% 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。
    4 ^! i; F0 j! `# Q, D%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % O:观察状态数0 [% N8 }3 g7 i, S9 w, w; g
    O = 7;
    3 b% u" Y! E) t. G$ J% f: z* NO2 = 7;. [' Y; b. r) ~5 r8 E
    % Q:HMM状态数' x; }* ?+ u$ N6 ~, T1 v+ ?
    Q = 5;$ P( d* t! V4 f8 V4 a2 r1 ^
    Q2 = 5;$ b7 i: E2 z/ F: _# q
    %训练的数据集,每一行数据就是一组训练的观察值
    - }  F: _3 {: L3 Xdata=[1,2,3,1,2,2,4,2,3,1,2,7,2;" n4 Q. l; v0 R' K
          1,2,3,6,2,2,1,4,3,1,5,3,1;
    - m& z0 ?2 X8 d; z6 O8 \      1,2,3,1,2,5,1,2,4,1,2,3,2;
    ( q7 i" l  ?. d4 O2 z      1,2,7,1,2,2,1,2,5,1,2,4,1;
    . U3 T9 f( W8 E9 E      5,2,3,3,5,2,1,2,3,1,2,3,6;+ n5 g4 Y! m; M
          1,2,3,1,2,2,1,6,5,1,2,6,4;
    2 ?% p% ^# P9 O* v/ l      5,2,3,4,4,2,1,2,3,1,2,5,6;
    " Y2 r4 @2 G( A      1,2,6,1,2,2,1,2,3,1,4,3,2;
    9 z0 t# e% |( j7 V$ c1 P& r$ g: `      1,2,3,4,2,7,1,4,3,1,7,3,3;
    ! r& V6 L8 r* q1 L& \; Z# l      5,2,3,5,2,2,1,2,3,1,2,3,4;
    9 p0 |9 b, I) N4 }: @      5,2,4,1,2,2,5,2,3,7,1,6,2;]
    & M* _- [: E4 [
      data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;
    # c, h/ z# p) g" D/ r& k/ j2 C          1,2,3,6,2,2,1,4,3,1,5,3,1;
    ) X( c, C& R/ ^1 l6 g+ V6 {          1,2,3,1,2,5,1,2,4,1,2,3,2;
    3 v/ c% L: v# L" z          1,2,7,1,2,2,1,2,5,1,2,4,1;' S) A; l) L6 i: [
              5,2,3,3,5,2,1,2,3,1,2,3,6;1 |. J7 v6 }/ A1 J
              1,2,3,1,2,2,1,6,5,1,2,6,4;
    ! I: t$ G/ W1 [3 Z( [2 R          5,2,3,4,4,2,1,2,3,1,2,5,6;4 w& ?2 ]6 A  u9 N
              1,2,6,1,2,2,1,2,3,1,4,3,2;) f5 `: C+ ~& |& a/ m
              1,2,3,4,2,7,1,4,3,1,7,3,3;
    9 c% i/ J! i, W/ q          5,2,3,5,2,2,1,2,3,1,2,3,4;
    / I) }. K* l. l3 V# }( I+ d          4,2,5,1,2,2,6,2,3,7,1,6,4;]
    % initial guess of parameters
    7 _' ?) I+ {/ W  Q% 初始化参数
    8 g# b5 }( o. z' Gprior1 = normalise(rand(Q,1));4 r% w5 T) x% R, i) n; A$ w( h& [- ~
    transmat1 = mk_stochastic(rand(Q,Q));" V) U1 F3 ]- @6 H
    obsmat1 = mk_stochastic(rand(Q,O));
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%1 T/ S" D) a1 g4 r$ j
    % 添加部分8 m- Y) h& z2 x
        prior3 = normalise(rand(Q2,1));
    % c0 M3 X0 w+ e    transmat3 = mk_stochastic(rand(Q2,Q2));- l- n+ S2 J* F
        obsmat3 = mk_stochastic(rand(Q2,O2));
    ) A( V: [# `8 E2 Q8 N3 r' |%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % improve guess of parameters using EM
    4 n0 E; t) f3 `' g3 D  W; i5 Z% 用data数据集训练参数矩阵形成新的HMM模型/ n1 t7 m0 R( H# U
    [LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));/ r0 `6 X$ n* z6 i- b
    % 训练后那行观察值与HMM匹配度1 {) u: \% z! v" L& c
    LL
    / {* W* z# ?: [. n( P" h1 b* b6 k% 训练后的初始概率分布
    8 c; H4 [) I4 m4 |7 {prior2$ Q$ }8 x, Z' d3 Y3 M7 _
    % 训练后的状态转移概率矩阵, m" T! {" @5 K8 `8 v* ~
    transmat2
    4 p; h) O5 @3 u/ {$ g4 N% 观察值概率矩阵. a* p9 `* L% G, a9 j  M
    obsmat2
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%0 A" B' L  V5 q% r) |2 m; m# ~1 O
    % 添加部分1 |4 @+ ^% K# k
        [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));
    ! V* N! F. a$ a    LL2' W" B  F- w$ l2 a# r
        prior4) p% T9 U  J5 y7 @4 G  o
        transmat4
    ) E- F( B( D- z$ R) J- h1 {1 S. p    obsmat4
    ( s$ `  I! y3 F%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % use model to compute log likelihood. d  A- d; p3 u7 y1 N! ~# V, `
    % data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]) ]0 p! p& Q. n8 P
    data1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]" J3 J1 P6 X# q! f2 b7 }+ A/ Q
    loglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)
    # d8 j1 n2 [# F. q% log lik is slightly different than LL(end), since it is computed after the final M step: b. K7 t3 b& N+ }( K3 D; T8 U
    % loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
    % path为viterbi算法的结果,即最大概率path
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    , a" @. v0 Q. W: L% 添加部分
    ! g( `; t! d3 n1 z  ^loglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)9 w8 |: A9 I4 u) `' _5 t
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    1 k! g1 @) E, Q" ]+ Q, a# r( x+ V" LB = multinomial_prob(data1,obsmat2);
    / d! v8 ?  x* C8 ?" l* Mpath = viterbi_path(prior2, transmat2, B)
    / |8 [2 Z: q- d6 [3 a9 usave('sa.mat');

    " q  e7 U9 u& g; `%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%, h0 M3 q/ H9 G
    % 添加部分" s" _" A+ ?; U( c* J6 T
        B2 = multinomial_prob(data1,obsmat4);. f7 g( R5 U& N. C+ D
        path2 = viterbi_path(prior4, transmat4, B2)
    8 I! M* m+ \( V! {, L5 o! V    save('sa2.mat');
    * j9 Q- W( T) E$ ?    if loglik2 > loglik
    2 i0 Q$ w) {! W: m9 T" b- U$ u        fuhe = 22 U2 }; U6 ^1 h8 p6 B3 o9 Q: [. U
        else
    + l; w- S5 [5 N) I        fuhe = 1$ E( X/ O" Y$ q( S
        end   
    6 ], ^* n+ z0 S" J4 f, d, h%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ------
    运行结果
    ------
    data =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    ) H. L* w) z2 p# J2 S" H. r     1     2     3     6     2     2     1     4     3     1     5     3     16 m0 w, V& i$ Y3 j) d# S
         1     2     3     1     2     5     1     2     4     1     2     3     24 c* N% f' A5 ^& l- V; F& |7 |
         1     2     7     1     2     2     1     2     5     1     2     4     1
    ) x( g  f" p- P* }9 |) m     5     2     3     3     5     2     1     2     3     1     2     3     6  g& d3 o, D: f3 s0 X  C
         1     2     3     1     2     2     1     6     5     1     2     6     4
    & \; w% Q. m9 f7 k7 g! U" \9 _     5     2     3     4     4     2     1     2     3     1     2     5     6) t- [" B. c; q8 v' X" }; D6 r
         1     2     6     1     2     2     1     2     3     1     4     3     2
    5 {$ ]1 Z2 [! q0 D/ w  ]% j5 ^, o! F     1     2     3     4     2     7     1     4     3     1     7     3     3
    + }3 a" R' Z, f% B+ z' H- y     5     2     3     5     2     2     1     2     3     1     2     3     4
    9 O2 X% ]2 X( E. [7 P& a     5     2     4     1     2     2     5     2     3     7     1     6     2
    ) A- C3 M" ~0 y) n% V% o5 b/ w
    data2 =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    6 q" [4 z* n4 V4 l( k     1     2     3     6     2     2     1     4     3     1     5     3     16 w3 q/ K1 i2 E- _+ R0 I" p; ?
         1     2     3     1     2     5     1     2     4     1     2     3     2
    % W  C2 ?% M/ ^6 A     1     2     7     1     2     2     1     2     5     1     2     4     12 z/ s  k" g) Q1 H" _, y
         5     2     3     3     5     2     1     2     3     1     2     3     6
    : H, m: [0 J$ K& W     1     2     3     1     2     2     1     6     5     1     2     6     4
    . W3 u7 L: t6 B6 K     5     2     3     4     4     2     1     2     3     1     2     5     69 V  _- n; Q$ f# L
         1     2     6     1     2     2     1     2     3     1     4     3     23 W4 R0 u, ]" {
         1     2     3     4     2     7     1     4     3     1     7     3     3
    7 d& f* o% Z: F& O     5     2     3     5     2     2     1     2     3     1     2     3     4) m$ ~" i6 E! {, t1 s- l
         4     2     5     1     2     2     6     2     3     7     1     6     4
    iteration 1, loglik = -327.100465
    - g/ J1 y: _# k( i- H# N2 {iteration 2, loglik = -238.2598126 ?6 S* b1 V5 b* a% L. Z# M
    iteration 3, loglik = -232.9629480 X. Y7 o0 Y3 U3 \
    iteration 4, loglik = -223.3238910 u: Q& ~2 U( k( k. m5 x
    iteration 5, loglik = -207.630875. w6 j. z) V5 Q: m* L: W' |+ Y* {8 J8 K
    iteration 6, loglik = -191.012697
    ! O, g- ]* O. }4 P7 Miteration 7, loglik = -178.6115462 A/ E# X& v  \4 W" g; V# v4 M
    iteration 8, loglik = -171.524132
    7 F' h4 ~/ T' Biteration 9, loglik = -168.626526
    , V( [( F* I2 O( Q: {iteration 10, loglik = -167.387057! z4 q5 E/ d  B+ s. k! V% [
    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
    , w. a, [- Z6 [
    prior2 =
        0.0000
    , f& b- Y9 _3 _    0.00006 R) ]9 H4 P- q5 A1 W# t6 ~
        1.0000
    + }8 C0 l2 h8 o+ K8 t    0.00008 w3 ~) H- G' s! l6 o6 _2 t$ ]
        0.0000

    0 k/ n; w8 d$ q; D' dtransmat2 =
        0.0138    0.0089    0.7680    0.1060    0.1033, x# `( a3 B+ b4 @7 j/ Q
        0.7811    0.0000    0.0199    0.0067    0.1923
    * W4 s- i  b* ?, _    0.0000    0.9936    0.0000    0.0064    0.0000, d$ }( P4 N6 p8 h! `
        0.1686    0.2604    0.2242    0.3398    0.0070
    9 K* F* Q" e+ U* C    0.0053    0.0406    0.8350    0.1184    0.0007

    5 n' c$ z7 c8 `, F" i, Mobsmat2 =
        0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.0351
    6 P7 Z* W5 A% y0 f- @* C$ K  n    0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.0228& p0 B9 ^7 u# K- V
        0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.0000
    / I2 k; }( D* `( L3 r  |    0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.00553 N; X( ^1 h2 a
        0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
    iteration 1, loglik = -277.738670# |2 V/ q/ _; S5 R0 w: U2 I
    iteration 2, loglik = -242.163247
    % ?$ K( o' t' C+ N! Y; riteration 3, loglik = -238.321971* N6 u! k& C$ O
    iteration 4, loglik = -233.1667462 }/ T2 }8 G0 h5 d" Q" G
    iteration 5, loglik = -225.682259" V" f; Z, J0 }7 \# F) G# I
    iteration 6, loglik = -214.560296
    / x* _+ M% X2 m* q) `) q# j+ Citeration 7, loglik = -201.182015! i, }3 S& f5 M- F, V, V
    iteration 8, loglik = -189.427453
    % }. g% h" M) d' D. {3 y" Fiteration 9, loglik = -179.156352
    2 ]8 H. @& q; h' v; h+ biteration 10, loglik = -171.7440967 Q; A+ _2 {: c3 g9 V
    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
    ; H, Y1 X4 ^4 V! m3 V7 G! D
    prior4 =
        0.0000
    $ ~+ ?) ]% @2 x0 H    0.9982
    % i" u$ \, u) a% C    0.0004! O& ?9 L' J  W, k
        0.0014
    2 Z$ M8 X* P: s% O# V5 B    0.0000

    % |, F" z1 g1 V% a8 qtransmat4 =
        0.0873    0.5277    0.2799    0.1007    0.00454 f. f- y& w9 G1 _/ r' ~) B
        0.0002    0.0000    0.0005    0.0000    0.9994% \: y7 G* D5 m8 G6 Q
        0.0180    0.0000    0.0118    0.0011    0.96928 R1 u1 O! c; e/ K! Q5 w- z
        0.0436    0.0226    0.0810    0.0219    0.8310
      g- M! s) E; t8 j# C0 }    0.9746    0.0056    0.0003    0.0195    0.0000
    - P" B' V! I: E
    obsmat4 =
        0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.0770" K% H1 M4 y) h3 p$ Z
        0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.0000
    ; {( B1 I" q! a  F8 \2 J    0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001
    * y- s+ p) b! D; i! u1 l  S  i* e5 Z    0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.0802
    : y/ `% [' O1 ~9 c/ Q% m# j3 R    0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225

    7 [) t& r( ], ~; R0 ddata1 =
         5     2     4     1     2     2     5     2     3     7     1     6     2

    + p0 i) Z. ?7 X9 V) hloglik =
      -19.2351

      n) I4 W3 u0 r3 m3 g. [. A, uloglik2 =
      -21.0715

    , w1 {( w" m' S0 i6 ]path =
         3     2     5     3     2     1     3     2     1     5     3     2     1

    1 T" W. K* B2 F3 ^% Ppath2 =
         2     5     1     2     5     1     2     5     1     1     2     5     1

    6 {7 G' u$ J; `" ^, }fuhe =
         1
    + i7 P, y: N7 L# N! u" T5 `
    2 T6 P! @" R- e/ F5 O' D, ~- D
    7 K2 x3 D& v( {9 t

    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-18 01:47 , Processed in 2.200230 second(s), 55 queries .

    回顶部