Python 为hmmlearn格式化数据

Python 为hmmlearn格式化数据,python,hidden-markov-models,hmmlearn,Python,Hidden Markov Models,Hmmlearn,我试图在python中使用hmmlearn来拟合一个隐马尔可夫模型。我假设我的数据格式不正确,但是对于hmmlearn来说,文档很简单。直观地说,我会将数据格式化为n_观测值x n_时间点x n_特征的三维数组,但hmmlearn似乎想要一个二维数组 import numpy as np from hmmlearn import hmm X = np.random.rand(10,5,3) clf = hmm.GaussianHMM(n_components=3, n_iter=10) clf.

我试图在python中使用hmmlearn来拟合一个隐马尔可夫模型。我假设我的数据格式不正确,但是对于hmmlearn来说,文档很简单。直观地说,我会将数据格式化为n_观测值x n_时间点x n_特征的三维数组,但hmmlearn似乎想要一个二维数组

import numpy as np
from hmmlearn import hmm
X = np.random.rand(10,5,3)
clf = hmm.GaussianHMM(n_components=3, n_iter=10)
clf.fit(X)
这会产生以下错误:

ValueError: Found array with dim 3. Estimator expected <= 2.

ValueError:找到具有dim 3的数组。预计估计器:以下所有内容均与当前未发布的
hmmlearn
版本0.2.0相关。PyPI上可用的0.1.0版本使用从
sklearn.hmm
继承的不同API

要将模型转换为多个序列,必须提供两个阵列:

  • X
    ——所有序列数据的串联
  • 长度
    ——序列长度的数组
我将尝试用一个例子来说明这些约定。考虑两个1D序列

X1 = [1, 2, 0, 1, 1]
X2 = [42, 42]
要将这两个序列传递给
.fit
方法,我们需要首先将它们连接到单个数组中,然后计算长度数组

X = np.append(X1, X2)
lengths = [len(X1), len(X2)]

在单个时间序列观测的情况下,hmmlearn拟合方法期望数据位于二维列向量中,可使用整形(-1,1)获得:

X = np.array([1, 1, 0, -1, -1])
model = hmm.GaussianHMM(n_components=2, n_iter=100)
model.fit(X.reshape(-1,1))