⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 online_em_hmm_demo.m

📁 隐马尔科夫模型对文本信息进行抽取利用MATLAB实现
💻 M
字号:
% Example of online EM% Generative modelrand('state', 1);O = 3;T = 50;S = 2;prior0 = normalise(rand(S,1));transmat0 = mk_stochastic(rand(S,S));obsmat0 = mk_stochastic(rand(S,O));data = sample_dhmm(prior0, transmat0, obsmat0, T, 1);% Initial guess of paramsrand('state', 2); % different seed!transmat1 = mk_stochastic(rand(S,S));obsmat1 = mk_stochastic(rand(S,O));prior1 = normalise(rand(S,1));% Uniformative Dirichlet prior (expected sufficient statistics / pseudo counts)e = 0.001;ess_visits = repmat(e, S, 1);ess_trans = repmat(e, S, S);ess_emit = repmat(e, S, O);% Paramsw = 2;decay_sched = [0.1:0.1:0.9];dirichlet = e;% InitializeLL1 = zeros(1,T);t = 1;y = data(t);data_win = y;[prior1, LL1(1)] = normalise(prior1 .* obsmat1(:,y));% Iteratefor t=2:T  y = data(t);  if t <= w    data_win = [data_win y];  else    data_win = [data_win(2:end) y];  end  d = decay_sched(min(t, length(decay_sched)));  [prior1, transmat1, obsmat1, ess_visits, ess_trans, ess_emit, gamma, ll] = online_em(...      prior1, transmat1, obsmat1, ess_visits, ess_trans, ess_emit, d, dirichlet, data_win);  bel = gamma(:, end);  LL1(t) = ll/length(data_win);  %fprintf('t=%d, ll=%f\n', t, ll);endLL1(1) = LL1(2); % since initial likelihood is for 1 sliceplot(1:T, LL1, 'rx-');% compare with offline learningif 0rand('state', 2);transmat2 = mk_stochastic(rand(S,S));obsmat2 = mk_stochastic(rand(S,O));prior2 = normalise(rand(S,1));niter = 10;verbose = 1;[LL2, prior2, transmat2, obsmat2, gamma] = learn_hmm(data, prior2, transmat2, obsmat2, niter, thresh, verbose);LL2 = LL2 / T;endif 0% The following approach fails, because doing ML estimation of obsmat based on a short% window can result in 0s, which cannot be recovered fromniter = 1;thresh = 1e-2;verbose = 0;for t=2:T  y = data(t);  if t <= w    data_win = [data_win y];  else    data_win = [data_win(2:end) y];  end  [LL, prior1, transmat1, obsmat1, gamma] = learn_hmm(data_win, prior1, transmat1, obsmat1, ...						  niter, thresh, verbose);  bel = gamma(:, end);endend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -