在GaussianHMM.fit([X])中对X感到困惑

时间:2015-06-11 19:37:38

标签: python scikit-learn hidden-markov-models

使用此代码:

X = numpy.array(range(0,5))
model = GaussianHMM(n_components=3,covariance_type='full', n_iter=1000)
model.fit([X])

我得到了

tuple index out of range 
self.n_features = obs[0].shape[1]

那么你应该准确传递.fit()的是什么?元组中隐藏的状态和排放?如果是这样的话?文档不太有用。

我注意到它喜欢传递元组,因为这不会出错:

X = numpy.column_stack([range(0,5),range(0,5)])
model = GaussianHMM(n_components=3,covariance_type='full', n_iter=1000)
model.fit([X])

编辑:

让我澄清一点,the documentation表示数组的正常性必须是:

  

类似阵列的观察序列列表(形状(n_i,n_features))。

这几乎表明你为每个样本传递一个元组,以二进制形式表示存在哪些观察结果。但是their example表示不是:

# pack diff and volume for training
X = np.column_stack([diff, volume])
因此混乱

2 个答案:

答案 0 :(得分:1)

看起来GaussianHMM函数仅用于多元发射HMM问题,因此需要具有> 1个发射矢量。当文件提到'n_features'时,它们并不是指排放可以表达自己的方式,而是指正交发射矢量的数量。

因此,“特征”(正交发射矢量)不应与“符号”相混淆,按照sklearn的说法(可能与我所知道的所有人共享的更大的hmm社区),请参考实际的唯一值系统能够发射。

对于单变量发射矢量问题,请使用MultinomialHMM。

希望澄清任何想要使用这些东西而不成为世界上最重要的HMM权威的人:)

答案 1 :(得分:1)

我意识到这是一个旧线程,但示例代码中的问题仍然存在。我相信这个示例现在位于this link并且仍然会出现同样的错误:

tuple index out of range 
self.n_features = obs[0].shape[1]

令人讨厌的代码行是: model = GaussianHMM(n_components=5, covariance_type="diag", n_iter=1000).fit(X)

应该是: model = GaussianHMM(n_components=5, covariance_type="diag", n_iter=1000).fit([X])