繁体   English   中英

如何在使用 hmmlearn 训练 Hidden Markov Model 时处理多个序列?

[英]How to handle multiple sequences in training Hidden Markov Model with hmmlearn?

这个问题也在 Cross-Validated SE 上

介绍

我正在处理描述 5 个设备功耗的时间序列数据。 我的目标是为每个设备训练一个最合适的隐马尔可夫 Model 并根据特定模型的似然分数进行分类(即给出功耗系列并告诉它是哪个设备)。 观察来自 7 天:

在此处输入图像描述

但是,测量不是连续的,在某些日子里,它们会覆盖一整天,而在另一些日子里,它们只是一部分,比如 7 小时,例如,这是其中一台设备的数据,分为几天:

在此处输入图像描述

我在理解如何将训练数据从hmmlearn库传递到 model 时遇到问题(假设我们需要前 5 天,剩下的 2 天将是评估和测试子集)。 现在它是这样完成的:

    model = hmm.GaussianHMM(n_components = n_hidden_states, n_iter = n_iter, random_state = seed)
    model.fit(train_dtf[device_name].to_numpy().reshape(-1,1))

其中train_dtf.head(1)是这样的:是在此处输入图像描述

并包含从 0 到 4 的day_index的观察结果。我从hmmlearn 文档中了解到的是,传递给model.fit的数据始终是一个数组,如果不是,则必须先将其连接起来。 我不确定这是否有意义。

问题

  1. 假设这是一个时间序列,这不是误导 model 吗? 我的意思是,特别是如果观察期在几天之间有所不同。 我有一种直觉,我们应该以某种方式表明它在某个时刻新的一天开始了,因此新的模式开始了。我的直觉对吗?

  2. 如果是这样,我该如何处理? 我的第一个想法是训练 model 一天,保存参数,然后在第二天重新训练 model,但使用保存的参数作为起点,依此类推,直到用完所有训练日。 不过,我对这个解决方案没有信心,因为我无法解释为什么它应该起作用。

  3. 也许有人可以提出任何其他更适合此特定任务的方法? 我肯定会尝试 DTW,但我想知道是否还有其他工具。

hmmlearn库允许您提供多个序列。 fit的文档允许您传递多个序列; 你只需要告诉fit他们从哪里开始。

lengths (array-like of integers, shape (n_sequences, )) – X中各个序列的长度。 这些的总和应该是n_samples

假设您有 2 天的每小时数据:您有 2 * 24 = 48 个观测值。 参数lengths将为 [24,24] 以向 model 指示此信息。 时间步 25 不使用时间步 24 的信息; 相反,它是从startprob_初始化的,就像时间步 0 一样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM