我是HMM的新手,但我已经阅读了足够的文献。我正在一个项目中,我将使用大气参数来预测降雨。

我有10年的四个可观察到的大气特征(湿度,温度,风,海平面高度)。我也有降雨量数据。

据我了解,每天都会根据空间降雨量来指定天气状态。因此,问题来了。假设我有100天的数据。

降雨= {1,2,3,4 ... 100}。因此,如果我想生成天气状态,该怎么办?

让我们假设

temperature = { 30 to 45, some kind of distribution }
humidity = { 25 to 80 }
wind = { 60 to 100 }
sea level height = { 35 to 90 }


怎么找


P(X_0)初始参数
P(X_t | X_t-1)状态转移矩阵,
P(Y_t | X_t)对状态的观察依赖性


是否需要一些聚类来生成状态?

我在MATLAB中编码。

您可以附带示例或可以解释在程序中实现程序的任何源。

最佳答案

HMM具有离散数量的状态,因此第一步是定义状态。定义好状态后,请为状态提出一种编号方案,并编写一个可以在给定时间段内接受数据的函数,并输出与该状态相对应的状态号。

一旦有了一个将数据映射到状态号的函数(我们称之为get_state),就可以如下创建状态转换矩阵:

T = zeros(num_states);
for day = 2:num_days
    s1 = get_state(data(day-1));
    s2 = get_state(data(day));
    T(s1,s2) = T(s1,s2) + 1;
end


现在,矩阵i,j的第T个元素为您提供从状态ij的转换计数。您可以将其转换为转换概率,如下所示:

M = bsxfun(@rdivide,T+1,sum(T+1,2));


观察对状态的依赖更加困难。您将必须弄清楚如何将观察到的数据转换为概率密度函数或概率质量函数。您可以从单个状态中得到多个观察到的分布,而不是将温度,湿度等组合到一个观察中。

这显然不是一个完整的实现,但是希望它足以为您提供一个起点。

08-24 20:51