Matlab 用非齐次隐马尔可夫模型预测降雨

Matlab 用非齐次隐马尔可夫模型预测降雨,matlab,machine-learning,hidden-markov-models,knn,em,Matlab,Machine Learning,Hidden Markov Models,Knn,Em,我是新来的,但是我读了足够多的文学作品。我正在做一个项目,我将利用大气参数预测降雨量 我有四个观察到的大气特征(湿度、温度、风、海平面高度),持续了10年。我还随身携带了降雨量数据 据我所知,每天的天气状况将根据空间降雨量来确定。问题来了。假设我有100天的数据 降雨量={1,2,3,4…100}。所以,如果我想生成天气状态,我应该怎么做 让我们假设 temperature = { 30 to 45, some kind of distribution } humidity = { 25 to

我是新来的,但是我读了足够多的文学作品。我正在做一个项目,我将利用大气参数预测降雨量

我有四个观察到的大气特征(湿度、温度、风、海平面高度),持续了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
M = bsxfun(@rdivide,T+1,sum(T+1,2));
矩阵
T
i,j
-第th个元素现在为您提供从状态
i
j
的转换计数。您可以将其转化为转移概率,如下所示:

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
M = bsxfun(@rdivide,T+1,sum(T+1,2));
观察结果对状态的依赖性更大。你必须弄清楚如何将观测数据转化为概率密度函数或概率质量函数。您可以从单个状态获得多个观测分布,而不是将温度、湿度等组合到单个观测中


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

正如@nispio在下面的回答中指出的,HMM基本上是使用离散值状态和输出变量构建的。您可能希望研究()这一模型,它是相同的模型,但使用连续值状态和输出——对于您的数据集来说,它可能是一种更好的模型类型。