如何使用隐马尔可夫模型检测时间序列中的状态?

机器算法验证 时间序列 隐马尔可夫模型 pymc 状态空间模型
2022-04-08 16:47:12

问题

  1. 我是否正确假设排放概率不会遵循我的特定问题的高斯分布?
  2. 显然,我需要训练模型进行状态检测。正如我从这个答案中了解到的那样,我应该使用Baum-Welch 算法,因为我不知道我的模型的发射和转移概率。这个对吗?
  3. 如何实现将每个数据样本状态“标记”为“收缩”或“舒张”状态,如下所示?我是否正确假设 Baum-Welch 算法会给我一个逐点状态的可能性,我可以用它来实现这种分类?

动脉线曲线

图例:收缩期= 红色,舒张期= 白色

  1. 有人可以为我指出此类数据分类/标签任务的示例代码或库吗?我更喜欢 Python 或 Java,但其他任何东西都可以。

问题

我面临的任务是根据动脉线采样得出的时间序列检测心动周期的收缩期和舒张期,如下图所示:

动脉线图

图例:时间 -> 动脉面积(以像素为单位)

经过一番阅读,似乎首选的方法之一是使用隐马尔可夫模型。我还阅读了《黑客的贝叶斯方法》以掌握该主题。维特比算法的维基百科页面,我将我的问题建模如下: 在此处输入图像描述

由于舒张需要大约 2/3 的心动周期时间,因此开始概率是已知的,但我不明白如何计算其余部分并标记我的数据。我找到了这个使用 PyMC 和高斯发射概率的隐马尔可夫模型示例,但我不明白如何使用它,而且文档很少......

1个回答

1)你应该有输出值的二项分布。

2 ) Baum Welch/ Forward back 用于训练模型。我的意思是估计过渡和排放概率。维特比会给你隐藏状态的序列。

3)你得到隐藏状态和所有隐藏状态的发射值分布。所有隐藏状态都会有不同的发射分布。根据排放值,您可以说出有关 Systole/Diastole 的任何信息。

本文可能会帮助您了解基础知识- http://machinelearningstories.blogspot.in/2017/02/hidden-markov-model-session-1.html