python - 如何在多列上实现隐马尔可夫模型?

标签 python pandas hidden markov hmmlearn

我在实现 HMM 模型时遇到问题。我从一个 pandas 数据框开始,我想在其中使用两列来预测隐藏状态。我正在使用 hmmlearn 包。

我正在按照 hmmlearn“使用多个序列”的说明进行操作"https://hmmlearn.readthedocs.io/en/latest/tutorial.html#multiple-sequences

我遵循下面的代码,但将 X1 和 X2 设置为我的列

X1 = [[0.5], [1.0], [-1.0], [0.42], [0.24]]
X2 = [[2.4], [4.2], [0.5], [-0.24], [0.24]]
X = np.concatenate([X1, X2])
lengths = [len(X1), len(X2)]
hmm.GaussianHMM(n_components=3).fit(X, lengths)
predictions=model.predict(X)

问题是,当我尝试预测状态而不是组合序列来创建 1 个预测时,我得到的是对每个观察结果的预测。所以在这个例子中,我想要 5 个观察结果,但我得到了 10 个。有没有办法将数据框的特征合并为独立变量以获得 1 个组合预测?

最佳答案

目前,您为模型提供了两个样本序列,每个序列有 5 个观测值,只有一个特征 - 因此总共有 10 个观测值。您想要的是具有 5 个观测值和两个特征的单个序列。

会是这样的:

X = [[0.5, 2.4], [1.0, 4.2], [-1.0, 0.5], [0.42, -0.24], [0.24, 0.25]]
lengths = [len(X)]
model = hmm.GaussianHMM(n_components=3).fit(X, lengths)
predictions = model.predict(X)

那么您将只有五个预测。

如果您想像示例中那样使用X1X2 构建X 变量,您可以使用zip 来实现:

X = [[x1[0], x2[0]] for x1, x2 in zip(X1, X2)]

关于python - 如何在多列上实现隐马尔可夫模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66272417/

相关文章:

javascript - 隐藏的密码字段不显示 php javascript

python - 使用自定义语料库在 NLTK 中训练 NER 模型

Python 3 map 返回 NoneType 对象列表而不是我修改的类型?

node.js - Puppeteer 错误没有找到选择器的 Node (单击按钮)

python - pandas.merge : match the nearest time stamp >= the series of timestamps

Python Pandas 删除重复单元格问题

html - 允许基于 "overflow: hidden"的导航中的图像溢出

python - 如何裁剪 Keras 中图层返回的值?

python - 如何调试选择排序输出中的逻辑错误?

python - 将 Pandas 数据框单元格中的设置值拆分为多行