微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 matlab 中使用 HMM可观察和隐藏状态 t+1进行预测

如何解决在 matlab 中使用 HMM可观察和隐藏状态 t+1进行预测

我想知道如何计算下一个状态 t + 1,包括隐藏状态和可观察状态。我在这里展示了一个简单的示例,其中包含一个具有 2000 个点和两个不同幅度的信号(图 1)。我使用两个可观察状态和两个隐藏状态。应用 HMM 训练和 Viterbi 算法后,信号在点 2000 处结束,可观察状态和隐藏状态等于 2(图 2)。目标是通过 HMM 能够预测 2001 点,该点被认为是可观察和隐藏状态 1。 如何使用 HMM 对状态 t + 1 进行预测? 我使用了函数 [PSTATES,~,FORWARD,BACKWARD,S] = hmmdecode (EST_OBS,TRANS_TOTAL,EMIS_TOTAL);通过前向确定状态 t + 1 但这表示隐藏状态 t + 1 保持在状态 2 中,这不违背预期。 我将代码保留在下面,以便它们可以用于解析。 提前感谢您的可用性。

[%% CODE %%
%% Prediction with HMM
clear all; close all; clc;
%% Data 
a = 0*ones(1,100);
b = 10*ones(1,100);
Data= \[a b a b a b a b a b a b a b a b a b a b\];
figure;
plot(Data)
%% HMM
% Model considerations
M=2; % Number Obs States
N=2;% Number Hidden States
% Defenição dos estados Observaveis
EST_OBS(Data<5)=1;
EST_OBS(Data>5)=2;
% geração das matrizes
% A - matriz de transmissão
A = rand(2,2)
rowsum = sum(A,2);
A = bsxfun(@rdivide,A,rowsum);
% colunas estado escondido; linhas estados observáveis
B = ones(N,M)/M; %emission matrix
% treino
\[TRANS_TOTAL,EMIS_TOTAL\] = hmmtrain(EST_OBS,B)
% Viterbi
EST_HIDDEN = hmmviterbi(EST_OBS,EMIS_TOTAL);
% Plot
N_PLOTS=3;
figure;
subplot(N_PLOTS,1,1);
plot(Data)
title('Sine Wave');
subplot(N_PLOTS,2);
plot(EST_OBS,'r');
title('Observable State');
subplot(N_PLOTS,3);
plot(EST_HIDDEN,'m');
title('Hidden state');][1]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。