Matlab 用非齐次隐马尔可夫模型预测降雨
我是新来的,但是我读了足够多的文学作品。我正在做一个项目,我将利用大气参数预测降雨量 我有四个观察到的大气特征(湿度、温度、风、海平面高度),持续了10年。我还随身携带了降雨量数据 据我所知,每天的天气状况将根据空间降雨量来确定。问题来了。假设我有100天的数据 降雨量={1,2,3,4…100}。所以,如果我想生成天气状态,我应该怎么做 让我们假设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
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)观测对状态的依赖性
您可以提供示例或任何可以解释在程序中实现的过程的来源。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基本上是使用离散值状态和输出变量构建的。您可能希望研究()这一模型,它是相同的模型,但使用连续值状态和输出——对于您的数据集来说,它可能是一种更好的模型类型。