Tensorflow学习笔记:隐马尔可夫模式 天气预测

隐马尔可夫 模式

The hidden markov model is a finite set of states, each of which is associated with a “generally multidimensional” probability distribution. Transitions among the states are governed by a set of probabilities called transition probabilities. - jedlik.phy.bme.hu

隐马尔可夫模型使用概率来根据过去发生的事件预测未来事件或状态。 状态(state)被认为是隐藏的,因为我们从不直接查看或访问。 相反,我们用每个状态的观察(observation)。 在每个状态,我们都有一个基于概率分布的与之相关的观察。

例如,关于天气,状态指的是热或冷。 在热状态下的观察是,“如果外面很热,一个人快乐的可能性为 70%,一个人悲伤的可能性为 30%。另一方面,转换(transition)是转换到不同状态的可能性。 例如,“寒冷的一天有 30% 的变化是紧随其后的炎热的一天”。

我们来设计可以预测天气的隐马尔可夫模式

天气预测

数据 Data

要创建一个隐马尔可夫模型,我们需要

  • 状态
  • 观察分布
  • 过渡分布
    假设我们已经有了这些信息。 我们的模型和信息如下所示。
    在这里插入图片描述
  1. 寒冷的日子用 0 编码,炎热的日子用 1 编码。
  2. 我们序列中的第一天有 80% 的几率感冒。
  3. 寒冷的一天有 30% 的机会紧随其后是炎热的一天。
  4. 炎热的一天有 20% 的机会紧随其后是寒冷的一天。
  5. 每天的温度正态分布,在寒冷的日子里,平均值和标准偏差为 0 和 5,在炎热的日子里,平均值和标准偏差为 15 和 10。
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
隐马尔可夫模型(Hidden Markov Model, HMM)是一种用于时间序列预测的统计模型。在Matlab中,我们可以使用该模型来实现时间序列的预测。 以下是一个简单的马尔可夫时间序列预测代码的示例: ```matlab % 导入数据 data = csvread('data.csv'); % 初始化HMM参数 n_states = 2; % 状态数量 n_obs = 2; % 观测数量 % 估计初始状态 init_probs = ones(1, n_states) / n_states; % 估计状态转移矩阵 trans_probs = [0.7, 0.3; 0.4, 0.6]; % 估计混淆矩阵 emission_probs = [0.9, 0.1; 0.2, 0.8]; % 构建隐马尔可夫模型 hmm = struct('init_probs', init_probs, ... 'trans_probs', trans_probs, 'emission_probs', emission_probs); % 使用维特比算法进行预测 predicted_states = viterbi(data, hmm); % 打印预测结果 disp(predicted_states); % 维特比算法函数 function predicted_states = viterbi(data, hmm) n_obs = size(data, 1); n_states = length(hmm.init_probs); v = zeros(n_states, n_obs); % 初始化维特比矩阵 bp = zeros(n_states, n_obs); % 回溯指针 % 初始化维特比矩阵的第一列 for i = 1:n_states v(i, 1) = hmm.init_probs(i) * hmm.emission_probs(i, data(1)); bp(i, 1) = 0; end % 递归计算维特比矩阵的其余列 for t = 2:n_obs for j = 1:n_states [v(j, t), bp(j, t)] = max(v(:, t-1) .* hmm.trans_probs(:, j)); v(j, t) = v(j, t) * hmm.emission_probs(j, data(t)); end end % 回溯预测状态序列 predicted_states = zeros(n_obs, 1); [~, predicted_states(n_obs)] = max(v(:, n_obs)); for t = n_obs-1:-1:1 predicted_states(t) = bp(predicted_states(t+1), t+1); end end ``` 在代码中,我们首先导入时间序列数据,并初始化HMM的参数。然后,通过估计初始状态、状态转移矩阵和混淆矩阵来构建隐马尔可夫模型。接下来,我们使用维特比算法进行时间序列的预测,并打印预测结果。 维特比算法是一种动态规划算法,可以在给定隐马尔可夫模型的情况下,寻找最可能的藏状态序列。在代码中,我们定义了一个维特比算法函数来实现这一过程。函数首先初始化维特比矩阵,并通过递归计算维特比矩阵的其他列。然后,通过回溯指针来预测状态序列。 请注意,以上代码只是一个简单的示例,实际应用中可能需要更复杂的模型和算法来进行时间序列的预测。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值